本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下
前言:与上篇文章相比,增加了文件操作,可将任意时期的的学生数据存储再文件中,菜单也随之改动,增加了文件操作一栏,是否存储到相应文件中由使用者决定
新增函数——文件操作;
- //学生数据文件储存?
- //储存任意时期的学生数据?
- void Store_List(Link head)
- {
- ?? ?//文件操作?
- ?? ?ofstream ofs;
- ?? ?ofs.open("Std_Information.txt",ios::out);
- ?? ?
- ?? ?if(head==NULL)
- ?? ?{
- ?? ??? ?printf("学生为空\n");
- ?? ??? ?return;?
- ?? ?}
- ?? ?else
- ?? ?{
- ?? ??? ?Link p=head->next;
- ?? ??? ?while(p)
- ?? ??? ?{
- ?? ??? ??? ?ofs<< "姓名:"<<p->data.studentName<<" ? ?学号:"<<p->data.studentNo<<" ?成绩:"<<p->data.score<<endl;?
- ?? ??? ??? ?p=p->next;
- ?? ??? ?}
- ?? ??? ?
- ?? ?}
- }
1.头文件和预处理
- #include <stdio.h>
- #include<string.h>
- #include<malloc.h>
- #include<stdlib.h>
- #include<stdbool.h>
- #include<iostream>
- #include<fstream>//文件操作所需头文件?
- using namespace std;
- #define NO_LENGTH ?20
- #define NAME_LENGTH 11
-
- /* 定义学生结构体的数据结构 */
- typedef struct Student{
- ?? ?char studentNo[NO_LENGTH];
- ?? ?char studentName[NAME_LENGTH];
- ?? ?int score;
- }st;
-
- /* 定义每条记录或节点的数据结构 */
- typedef struct node
- {
- ?? ?struct Student data; //数据域
- ?? ?struct node *next; //指针域
- }Node,*Link; ?//Node为node类型的别名,Link为node类型的指针别名
2.定义学生结构体的数据结构
- typedef struct Student{
- ?? ?char studentNo[NO_LENGTH];
- ?? ?char studentName[NAME_LENGTH];
- ?? ?int score;
- }st;
3.定义每条记录或节点的数据结构
- /* 定义每条记录或节点的数据结构 */
- typedef struct node
- {
- ?? ?struct Student data; //数据域
- ?? ?struct node *next; //指针域
- }Node,*Link; ?//Node为node类型的别名,Link为node类型的指针别名
4.函数接口代码.
1.定义提示菜单
- //定义提示菜单
- void myMenu(){
-
- ?? ?printf("*****************************菜单*****************************\n");?
- ?? ?printf("***********************1 增加学生记录*************************\n");?
- ?? ?printf("***********************2 删除学生记录*************************\n");?
- ?? ?printf("***********************3 查找学生记录*************************\n");?
- ?? ?printf("***********************4 修改学生记录*************************\n");?
- ?? ?printf("***********************5 统计学生人数 ************************\n");?
- ?? ?printf("***********************6 显示学生记录*************************\n");?
- ?? ?printf("***********************7 信息文件打印*************************\n");
- ?? ?printf("***********************8 退出系统 ****************************\n");?
- ?? ?
- }
2.增加学生记录
- void inputStudent(Link l){
- ?? ? printf("请输入学生学号:");
- ?? ? scanf("%s",l->data.studentNo);
- ?? ? printf("请输入学生的姓名:");
- ?? ? scanf("%s",l->data.studentName);
- ?? ?printf("请输入学生的成绩:");
- ?? ? scanf("%s",&(l->data.score));
- ?? ? //每个新创建的节点的next域都初始化为NULL
- ?? ? l->next = NULL;
- ?? ? system("cls");
- }
3.输入学号接口·
- void inputStudentNo(char s[],char no[]){
- ?? ?printf("请输入要%s的学生学号:",s);
- ?? ?scanf("%s",no);
- }
4.遍历表中学生
- //遍历表中学生?
- void displayNode(Link head){
- ?? ?if(head==NULL)
- ?? ?{
- ?? ??? ?printf("学生为空\n");
- ?? ??? ?return;?
- ?? ?}
- ?? ?else
- ?? ?{
- ?? ??? ?Link p=head->next;
- ?? ??? ?while(p)
- ?? ??? ?{
- ?? ??? ??? ?cout<<"姓名:"<<p->data.studentName<<" ? ?学号"<<p->data.studentNo<<" ?成绩:"<<p->data.score<<endl;?
- ?? ??? ??? ?p=p->next;
- ?? ??? ?}
- ?? ??? ?
- ?? ?}
- ? ?// 填写代码,根据传入的链表head头指针,扫描链表显示所有节点的信息
- ? ?system("pause");
- ? ?system("cls");
- }
5.增加学生记录
- /* 增加学生记录 */
- bool addNode(Link head){
- ?? ? Link p,q; ? //p,q两个节点一前一后
- ?? ? Link node; ?//node指针指向新创建的节点
- ?? ? node=(Link)malloc(sizeof(Node));
- ?? ? inputStudent(node);
-
- ?? ? q = head;
- ?? ? p = head->next; ?//q指向head后面的第一个有效节点
- ?? ? if(head->next==NULL)
- ?? ??? ? //链表为空时
- ?? ??? ?head->next = node;
- ?? ? else {
- ?? ??? ? //循环访问链表中的所有节点
- ?? ??? ?while(p != NULL){
- ?? ??? ??? ?if (node->data.studentNo < p->data.studentNo){
- ?? ??? ??? ??? ?//如果node节点的学号比p节点的学号小,则插在p的前面,完成插入后,提前退出子程序
- ?? ??? ??? ??? ?q->next = node;
- ?? ??? ??? ??? ?node->next = p;
- ?? ??? ??? ??? ?return true;
- ?? ??? ??? ?}
- ?? ??? ??? ?else{
- ?? ??? ??? ??? ?//如果node节点的学号比p节点的学号大,继续向后移动指针(依然保持pq一前一后)
- ?? ??? ??? ??? ?q = p;
- ?? ??? ??? ??? ?p = p->next;
-
- ?? ??? ??? ?}
- ?? ??? ?}
- ?? ??? ?//如果没能提前退出循环,则说明之前没有插入,那么当前node节点的学号是最大值,此时插在链表的最后面
- ?? ??? ?q->next = node;
-
- ?? ?}
- ?? ? return true;
- ?? ? system("pause");
- ? ?system("cls");
- }
6.删除学生信息
- //删除学生信息
- bool deleteNode(Link head){
- ? ? // 按照给定的学号删除学生记录,如果删除成功返回true,如果没找到学号返回false
-
- ? ? //输入要处理的学号
- ? ? ?? ?char no[NO_LENGTH];
- ?? ?inputStudentNo("删除",no);
- ?? ??? ?Link p=head->next;
- ?? ?Link q=head;
- ?? ?while(p)
- ?? ?{
- ?? ??? ?if(strcmp(p->data.studentNo,no)==0)
- ?? ??? ?{
- ?? ??? ??? ?cout<<"成功删除该学生"<<endl;?
- ?? ??? ??? ?q->next=p->next;
- ?? ??? ??? ?free(p);
- ?? ??? ??? ?system("pause");
- ? ??? ??? ??? ?system("cls");
- ?? ??? ??? ?return true;
- ?? ??? ?}
- ?? ??? ?else
- ?? ??? ?{
- ?? ??? ??? ?q=p;
- ?? ??? ??? ?p=p->next;
- ?? ??? ?}
- ?? ?}
- ?? ?cout<<"未找到该学生"<<endl;?
- ?? ??? ?system("pause");
- ? ??? ??? ?system("cls");
- ?? ?return false;
- }
7.查找学生信息
- //查找学生信息?
- bool queryNode(Link head){
- ? ? // 按照给定的学号查询学生记录,如果查找成功返回true,如果没找到学号返回false
-
- ? ? //输入要处理的学号
- ?? ?char no[NO_LENGTH];
- ?? ?inputStudentNo("查找",no);
- ?? ??? ?Link p=head->next;
- ?? ?while(p)
- ?? ?{
- ?? ??? ?if(strcmp(p->data.studentNo,no)==0)
- ?? ??? ?{
- ?? ??? ??? ?
- ? ??? ??? ??? ?system("cls");
- ? ??? ??? ??? ?cout<<"姓名:"<<p->data.studentName<<" ? ?学号:"<<p->data.studentNo<<" ?成绩:"<<p->data.score<<endl;?
- ?? ??? ??? ?return true;
- ?? ??? ?}
- ?? ??? ?else
- ?? ??? ?{
- ?? ??? ??? ?p=p->next;
- ?? ??? ?}
- ?? ?}
- ?? ?cout<<"未找到该学生"<<endl;?
- ? ?system("cls");
-
- ?? ?return false;
- }
8.修改学生信息
- //修改学生信息?
- bool modifyNode(Link head){
- ? ? // 按照给定的学号找到学生记录节点,如果修改成功返回true,如果没找到学号返回false
- ?? ?
- ? ? //输入要处理的学号
- ?? ?char no[NO_LENGTH];
- ?? ?inputStudentNo("修改",no);
- ?? ?Link p=head->next;
- ?? ?while(p)
- ?? ?{
- ?? ??? ?if(strcmp(p->data.studentNo,no)==0)
- ?? ??? ?{
- ?? ??? ??? ?cout<<"请输入修改后的姓名"<<endl;?
- ?? ??? ??? ?cin>>p->data.studentName;
- ?? ??? ??? ?cout<<"请输入修改后的学号"<<endl;?
- ?? ??? ??? ?cin>>p->data.studentNo;
- ?? ??? ??? ?cout<<"请输入修改后的成绩"<<endl;?
- ?? ??? ??? ?cin>>p->data.score;
- ?? ??? ??? ?system("cls");
- ?? ??? ??? ?return true;
- ?? ??? ?}
- ?? ??? ?else
- ?? ??? ?{
- ?? ??? ??? ?p=p->next;
- ?? ??? ?}
- ?? ?}
- ?? ?cout<<"未找到该学生,请重新输入学号"<<endl;?
- ?? ?system("cls");
- ?? ?return false;
- }
9.统计学生人数
- //统计学生人数
- int countNode(Link head){
- ?? ?//统计学生人数,扫描链表统计节点个数,返回节点数
- ?? ?Link p;
- ?? ?int count = 0;
- ?? ?p = head->next;
- ?? ?while(p)
- ?? ?{
- ?? ??? ?p=p->next;
- ?? ??? ?count++;
- ?? ?}
- ?? ?//填充代码
- ?? ?system("cls");
- ?? ?return count;
- }
10.清空链表
- //清空链表?
- void clearLink(Link head){
- ?? ?Link q,p;
- ?? ?p=head->next;
- ?? ?q=head;
- ?? ?while(p)
- ?? ?{
- ?? ??? ?q->next=p->next;
- ?? ??? ?free(p);
- ?? ??? ?p=q->next;
- ?? ?}
- ? ? ? ? //遍历链表,用free语句删除链表中用malloc建立起的所有的节点
- }
11.文件操作
- //学生数据文件储存?
- //储存任意时期的学生数据?
- void Store_List(Link head)
- {
- ?? ?//文件操作?
- ?? ?ofstream ofs;
- ?? ?ofs.open("Std_Information.txt",ios::out);
- ?? ?
- ?? ?if(head==NULL)
- ?? ?{
- ?? ??? ?printf("学生为空\n");
- ?? ??? ?return;?
- ?? ?}
- ?? ?else
- ?? ?{
- ?? ??? ?Link p=head->next;
- ?? ??? ?while(p)
- ?? ??? ?{
- ?? ??? ??? ?ofs<< "姓名:"<<p->data.studentName<<" ? ?学号:"<<p->data.studentNo<<" ?成绩:"<<p->data.score<<endl;?
- ?? ??? ??? ?p=p->next;
- ?? ??? ?}
- ?? ??? ?
- ?? ?}
- }
5.main函数
- int main() {
- ?? ?int select;
- ? ? ?? ?int count;
- ?? ?Link head; ?// 定义链表
-
- ?? ?//建立head头结点,在这个程序中head指向头结点,头结点data部分没有内容,其后续节点才有真正的数据
- ?? ?head = (Link)malloc(sizeof(Node));
- ?? ?head->next = NULL;
-
- ?? ?while(1)
- ?? ?{
- ?? ??? ?myMenu();
- ?? ??? ?printf("\n请输入你的选择(0-7):"); ?//显示提示信息
- ?? ??? ?scanf("%d",&select);
- ?? ??? ?switch(select)
- ?? ??? ?{
- ?? ??? ?case 1:
- ?? ??? ??? ?//增加学生记录
- ?? ??? ??? ?if(addNode(head))
- ?? ??? ??? ??? ?printf("成功插入一个学生记录。\n\n");
- ?? ??? ??? ?break;
- ?? ??? ?case 2:
- ?? ??? ??? ?//删除学生记录
- ?? ??? ??? ?if(deleteNode(head))
- ?? ??? ??? ??? ?printf("成功删除一个学生记录。\n\n");
- ?? ??? ??? ?else
- ?? ??? ??? ??? ?printf("没有找到要删除的学生节点。\n\n");
- ?? ??? ??? ?break;
- ?? ??? ?case 3:
- ?? ??? ??? ?//查询学生记录
- ?? ??? ??? ?if(queryNode(head))
- ?? ??? ??? ??? ?printf("成功找到学生记录。\n\n");
- ?? ??? ??? ?else
- ?? ??? ??? ??? ?printf("没有找到要查询的学生节点。\n\n");
- ?? ??? ??? ?break;
- ?? ??? ?case 4:
- ?? ??? ??? ?//修改学生记录
- ?? ??? ??? ?if(modifyNode(head))
- ?? ??? ??? ??? ?printf("成功修改一个学生记录。\n\n");
- ?? ??? ??? ?else
- ?? ??? ??? ??? ?printf("没有找到要修改的学生节点。\n\n");
- ?? ??? ??? ?break;
- ?? ??? ?case 5:
- ?? ??? ??? ?//统计学生人数
- ?? ??? ??? ?count = countNode(head);
- ?? ??? ??? ?printf("学生人数为:%d\n\n",count);
- ?? ??? ??? ?break;
- ?? ??? ?case 6:
- ?? ??? ??? ?//显示学生记录
- ?? ??? ??? ?displayNode(head);
- ?? ??? ??? ?break;
- ?? ??? ?case 7:
- ?? ??? ??? ?//退出前清除链表中的所有结点
- ? ? ? ? ? ? clearLink(head);
- ?? ??? ??? ?return 0;
- ?? ??? ?default:
- ?? ??? ??? ?printf("输入不正确,应该输入0-7之间的数。\n\n");
- ?? ??? ??? ?system("cls");?
- ?? ??? ??? ?break;
- ?? ??? ?}
- ?? ?}
- ?? ?return 0;
- }
6.学生信息管理系统总源码(可直接复制运行)
- #include <stdio.h>
- #include<string.h>
- #include<malloc.h>
- #include<stdlib.h>
- #include<stdbool.h>
- #include<iostream>
- #include<fstream>//文件操作所需头文件?
- using namespace std;
- #define NO_LENGTH ?20
- #define NAME_LENGTH 11
-
- /* 定义学生结构体的数据结构 */
- typedef struct Student{
- ?? ?char studentNo[NO_LENGTH];
- ?? ?char studentName[NAME_LENGTH];
- ?? ?int score;
- }st;
-
- /* 定义每条记录或节点的数据结构 */
- typedef struct node
- {
- ?? ?struct Student data; //数据域
- ?? ?struct node *next; //指针域
- }Node,*Link; ?//Node为node类型的别名,Link为node类型的指针别名
-
- //定义提示菜单
- void myMenu(){
-
- ?? ?printf("*****************************菜单*****************************\n");?
- ?? ?printf("***********************1 增加学生记录*************************\n");?
- ?? ?printf("***********************2 删除学生记录*************************\n");?
- ?? ?printf("***********************3 查找学生记录*************************\n");?
- ?? ?printf("***********************4 修改学生记录*************************\n");?
- ?? ?printf("***********************5 统计学生人数 ************************\n");?
- ?? ?printf("***********************6 显示学生记录*************************\n");?
- ?? ?printf("***********************7 信息文件打印*************************\n");
- ?? ?printf("***********************8 退出系统 ****************************\n");?
- ?? ?
- }
-
- void inputStudent(Link l){
- ?? ? printf("请输入学生学号:");
- ?? ? scanf("%s",l->data.studentNo);
- ?? ? printf("请输入学生的姓名:");
- ?? ? scanf("%s",l->data.studentName);
- ?? ?printf("请输入学生的成绩:");
- ?? ? scanf("%d",&(l->data.score));
- ?? ? //每个新创建的节点的next域都初始化为NULL
- ?? ? l->next = NULL;
- ?? ? system("cls");
- }
-
- void inputStudentNo(char s[],char no[]){
- ?? ?printf("请输入要%s的学生学号:",s);
- ?? ?scanf("%s",no);
- }
- //遍历表中学生?
- void displayNode(Link head){
- ?? ?if(head==NULL)
- ?? ?{
- ?? ??? ?printf("学生为空\n");
- ?? ??? ?return;?
- ?? ?}
- ?? ?else
- ?? ?{
- ?? ??? ?Link p=head->next;
- ?? ??? ?while(p)
- ?? ??? ?{
- ?? ??? ??? ?cout<<"姓名:"<<p->data.studentName<<" ? ?学号"<<p->data.studentNo<<" ?成绩:"<<p->data.score<<endl;?
- ?? ??? ??? ?//ofs<< "姓名:"<<p->data.studentName<<" ? ?学号"<<p->data.studentNo<<" ?成绩:"<<p->data.score<<endl;?
- ?? ??? ??? ?p=p->next;
- ?? ??? ?}
- ?? ??? ?
- ?? ?}
- ? ?// 填写代码,根据传入的链表head头指针,扫描链表显示所有节点的信息
- ? ?system("pause");
- ? ?system("cls");
- }
-
- /* 增加学生记录 */
- bool addNode(Link head){
- ?? ? Link p,q; ? //p,q两个节点一前一后
- ?? ? Link node; ?//node指针指向新创建的节点
- ?? ? node=(Link)malloc(sizeof(Node));
- ?? ? inputStudent(node);
-
- ?? ? q = head;
- ?? ? p = head->next; ?//q指向head后面的第一个有效节点
- ?? ? if(head->next==NULL)
- ?? ??? ? //链表为空时
- ?? ??? ?head->next = node;
- ?? ? else {
- ?? ??? ? //循环访问链表中的所有节点
- ?? ??? ?while(p != NULL){
- ?? ??? ??? ?if (node->data.studentNo < p->data.studentNo){
- ?? ??? ??? ??? ?//如果node节点的学号比p节点的学号小,则插在p的前面,完成插入后,提前退出子程序
- ?? ??? ??? ??? ?q->next = node;
- ?? ??? ??? ??? ?node->next = p;
- ?? ??? ??? ??? ?return true;
- ?? ??? ??? ?}
- ?? ??? ??? ?else{
- ?? ??? ??? ??? ?//如果node节点的学号比p节点的学号大,继续向后移动指针(依然保持pq一前一后)
- ?? ??? ??? ??? ?q = p;
- ?? ??? ??? ??? ?p = p->next;
-
- ?? ??? ??? ?}
- ?? ??? ?}
- ?? ??? ?//如果没能提前退出循环,则说明之前没有插入,那么当前node节点的学号是最大值,此时插在链表的最后面
- ?? ??? ?q->next = node;
-
- ?? ?}
- ?? ? return true;
- ?? ? system("pause");
- ? ?system("cls");
- }
-
- bool deleteNode(Link head){
- ? ? // 按照给定的学号删除学生记录,如果删除成功返回true,如果没找到学号返回false
-
- ? ? //输入要处理的学号
- ? ? ?? ?char no[NO_LENGTH];
- ?? ?inputStudentNo("删除",no);
- ?? ??? ?Link p=head->next;
- ?? ?Link q=head;
- ?? ?while(p)
- ?? ?{
- ?? ??? ?if(strcmp(p->data.studentNo,no)==0)
- ?? ??? ?{
- ?? ??? ??? ?cout<<"成功删除该学生"<<endl;?
- ?? ??? ??? ?q->next=p->next;
- ?? ??? ??? ?free(p);
- ?? ??? ??? ?system("pause");
- ? ??? ??? ??? ?system("cls");
- ?? ??? ??? ?return true;
- ?? ??? ?}
- ?? ??? ?else
- ?? ??? ?{
- ?? ??? ??? ?q=p;
- ?? ??? ??? ?p=p->next;
- ?? ??? ?}
- ?? ?}
- ?? ?cout<<"未找到该学生"<<endl;?
- system("pause");
- ? ?system("cls");
- ?? ?return false;
- }
-
- //查找学生信息?
- bool queryNode(Link head){
- ? ? // 按照给定的学号查询学生记录,如果查找成功返回true,如果没找到学号返回false
-
- ? ? //输入要处理的学号
- ?? ?char no[NO_LENGTH];
- ?? ?inputStudentNo("查找",no);
- ?? ??? ?Link p=head->next;
- ?? ?while(p)
- ?? ?{
- ?? ??? ?if(strcmp(p->data.studentNo,no)==0)
- ?? ??? ?{
- ?? ??? ??? ?
- ? ??? ??? ??? ?system("cls");
- ? ??? ??? ??? ?cout<<"姓名:"<<p->data.studentName<<" ? ?学号:"<<p->data.studentNo<<" ?成绩:"<<p->data.score<<endl;?
- ?? ??? ??? ?return true;
- ?? ??? ?}
- ?? ??? ?else
- ?? ??? ?{
- ?? ??? ??? ?p=p->next;
- ?? ??? ?}
- ?? ?}
- ?? ?cout<<"未找到该学生"<<endl;?
- ? ?system("cls");
-
- ?? ?return false;
- }
-
- //修改学生信息?
- bool modifyNode(Link head){
- ? ? // 按照给定的学号找到学生记录节点,如果修改成功返回true,如果没找到学号返回false
- ?? ?
- ? ? //输入要处理的学号
- ?? ?char no[NO_LENGTH];
- ?? ?inputStudentNo("修改",no);
- ?? ?Link p=head->next;
- ?? ?while(p)
- ?? ?{
- ?? ??? ?if(strcmp(p->data.studentNo,no)==0)
- ?? ??? ?{
- ?? ??? ??? ?cout<<"请输入修改后的姓名"<<endl;?
- ?? ??? ??? ?cin>>p->data.studentName;
- ?? ??? ??? ?cout<<"请输入修改后的学号"<<endl;?
- ?? ??? ??? ?cin>>p->data.studentNo;
- ?? ??? ??? ?cout<<"请输入修改后的成绩"<<endl;?
- ?? ??? ??? ?cin>>p->data.score;
- ?? ??? ??? ?system("cls");
- ?? ??? ??? ?return true;
- ?? ??? ?}
- ?? ??? ?else
- ?? ??? ?{
- ?? ??? ??? ?p=p->next;
- ?? ??? ?}
- ?? ?}
- ?? ?cout<<"未找到该学生,请重新输入学号"<<endl;?
- ?? ?system("cls");
- ?? ?return false;
- }
-
- //统计学生人数
- int countNode(Link head){
- ?? ?//统计学生人数,扫描链表统计节点个数,返回节点数
- ?? ?Link p;
- ?? ?int count = 0;
- ?? ?p = head->next;
- ?? ?while(p)
- ?? ?{
- ?? ??? ?p=p->next;
- ?? ??? ?count++;
- ?? ?}
- ?? ?//填充代码
- ?? ?system("cls");
- ?? ?return count;
- }
-
- //清空链表?
- void clearLink(Link head){
- ?? ?Link q,p;
- ?? ?p=head->next;
- ?? ?q=head;
- ?? ?while(p)
- ?? ?{
- ?? ??? ?q->next=p->next;
- ?? ??? ?free(p);
- ?? ??? ?p=q->next;
- ?? ?}
- ? ? ? ? //遍历链表,用free语句删除链表中用malloc建立起的所有的节点
- }
-
- //学生数据文件储存?
- //储存任意时期的学生数据?
- void Store_List(Link head)
- {
- ?? ?//文件操作?
- ?? ?ofstream ofs;
- ?? ?ofs.open("Std_Information.txt",ios::out);
- ?? ?
- ?? ?if(head==NULL)
- ?? ?{
- ?? ??? ?printf("学生为空\n");
- ?? ??? ?return;?
- ?? ?}
- ?? ?else
- ?? ?{
- ?? ??? ?Link p=head->next;
- ?? ??? ?while(p)
- ?? ??? ?{
- ?? ??? ??? ?ofs<< "姓名:"<<p->data.studentName<<" ? ?学号:"<<p->data.studentNo<<" ?成绩:"<<p->data.score<<endl;?
- ?? ??? ??? ?p=p->next;
- ?? ??? ?}
- ?? ??? ?
- ?? ?}
- }
- int main() {
- ?? ?int select;
- ? ? ?? ?int count;
- ?? ?Link head; ?// 定义链表
- ?? ?
- ?? ?
- ?? ?//建立head头结点,在这个程序中head指向头结点,头结点data部分没有内容,其后续节点才有真正的数据
- ?? ?head = (Link)malloc(sizeof(Node));
- ?? ?head->next = NULL;
-
- ?? ?while(1)
- ?? ?{
- ?? ??? ?myMenu();
- ?? ??? ?printf("\n请输入你的选择(0-8):"); ?//显示提示信息
- ?? ??? ?scanf("%d",&select);
- ?? ??? ?switch(select)
- ?? ??? ?{
- ?? ??? ?case 1:
- ?? ??? ??? ?//增加学生记录
- ?? ??? ??? ?if(addNode(head))
- ?? ??? ??? ??? ?printf("成功插入一个学生记录。\n\n");
- ?? ??? ??? ?break;
- ?? ??? ?case 2:
- ?? ??? ??? ?//删除学生记录
- ?? ??? ??? ?if(deleteNode(head))
- ?? ??? ??? ??? ?printf("成功删除一个学生记录。\n\n");
- ?? ??? ??? ?else
- ?? ??? ??? ??? ?printf("没有找到要删除的学生节点。\n\n");
- ?? ??? ??? ?break;
- ?? ??? ?case 3:
- ?? ??? ??? ?//查询学生记录
- ?? ??? ??? ?if(queryNode(head))
- ?? ??? ??? ??? ?printf("成功找到学生记录。\n\n");
- ?? ??? ??? ?else
- ?? ??? ??? ??? ?printf("没有找到要查询的学生节点。\n\n");
- ?? ??? ??? ?break;
- ?? ??? ?case 4:
- ?? ??? ??? ?//修改学生记录
- ?? ??? ??? ?if(modifyNode(head))
- ?? ??? ??? ??? ?printf("成功修改一个学生记录。\n\n");
- ?? ??? ??? ?else
- ?? ??? ??? ??? ?printf("没有找到要修改的学生节点。\n\n");
- ?? ??? ??? ?break;
- ?? ??? ?case 5:
- ?? ??? ??? ?//统计学生人数
- ?? ??? ??? ?count = countNode(head);
- ?? ??? ??? ?printf("学生人数为:%d\n\n",count);
- ?? ??? ??? ?break;
- ?? ??? ?case 6:
- ?? ??? ??? ?//显示学生记录
- ?? ??? ??? ?displayNode(head);
- ?? ??? ??? ?break;
- ?? ??? ?case 7:Store_List(head);
- ?? ??? ??? ??? ?cout<<"打印成功"<<endl;?
- ?? ??? ??? ??? ?system("pause");
- ? ??? ??? ??? ??? ?system("cls");
- ?? ??? ??? ?break;
- ?? ??? ?case 8:
- ?? ??? ??? ?//退出前清除链表中的所有结点
- ? ? ? ? ? ? clearLink(head);
- ?? ??? ??? ?return 0;
- ?? ??? ?default:
- ?? ??? ??? ?printf("输入不正确,应该输入0-8之间的数。\n\n");
- ?? ??? ??? ?system("pause");
- ?? ??? ??? ?system("cls");?
- ?? ??? ??? ?break;
- ?? ??? ?}
- ?? ?}
- ?? ?return 0;
- }
7.测试结果






以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。