C语言综合实验1—学生信息管理系统
发布日期:2021-08-30 16:00:50 浏览次数:14 分类:技术文章

本文共 9923 字,大约阅读时间需要 33 分钟。

实验题目:学生信息管理系统

实验要求:用户可以选择1-7可以分别进行学生信息的查看、添加、删除,修改,计算平均成绩,保存,退出系统操作。

提示:用一个结构体类型表示学生信息

1 typedef struct node /*定义结构体*/ 2 {  3     int num; //学号 4     char name[15];//姓名 5     char sex[9]; //性别 6     int age;  //年龄 7     int english; //英语成绩 8     int math; //数学成绩 9     int computer;//计算机成绩10     int average; //平均成绩11     struct node *next; //链表指针域12 }student_info;

运行过程中采用一个结构体链表存储学生信息。退出系统时可以采用文件存储用户输入的信息,再次运行的时候从文件中读取。

完整C语言程序分为三个文件,student.h、student.cpp和main.c文件。具体实现如下所示:

student.h文件中定义学生信息结构体,操作函数声明。

1 #ifndef STUDENT_HEAD 2 #define STUDENT_HEAD 3  4 typedef struct node /*定义结构体*/ 5 {  6     int num; //学号 7     char name[15];//姓名 8     char sex[9]; //性别 9     int age;  //年龄10     int english; //英语成绩11     int math; //数学成绩12     int computer;//计算机成绩13     int average; //平均成绩14     struct node *next; //链表指针域15 }student_info;16 17 //学生信息链表18 extern student_info* student_list;  //全局变量声明19 20 21 //初始化函数声明22 //初始化学生信息链表23 void init_student_info_list();24 //判断学生信息链表是否为空25 int student_list_empty();26 27 //操作函数声明28 //向学校信息表中添加学生信息记录29 int add_student_info();30 //根据学号删除学生信息31 int delete_student_info(int num);32 //根据学号修改学生信息33 int modify_student_info(int num);34 //根据学号查找学生信息35 student_info* search_student_info(int num);36 //输出每个学生的平均成绩37 void display_average();38 //显示所有学生信息39 void display_student_info();40 //将学生信息保存到文件41 int save_file();42 //从文件中读取学生信息43 int read_file();44 #endif

student.c文件中是对student.h文件中声明的函数进行定义,给出具体的实现代码。

1 #include "student.h"  2 #include 
3 #include
4 #include
5 6 //初始化学生信息链表 7 void init_student_info_list() 8 { 9 //学生信息链表头结点 10 student_list = (student_info*)malloc(sizeof(student_info)); 11 student_list->next = NULL; 12 } 13 //判断学生信息链表是否为空 14 int student_list_empty() 15 { 16 return student_list->next == NULL; 17 } 18 //操作函数实现 19 //向学校信息表中添加学生信息记录 20 int add_student_info() 21 { 22 student_info *pstu = (student_info*)malloc(sizeof(student_info)); 23 if(pstu == NULL) 24 { 25 printf("内存分配失败.\n"); 26 return 0; 27 } 28 printf("请按要求一次输入学生的信息.\n"); 29 printf("请输入学号: "); 30 scanf("%d",&pstu->num); 31 //判断该学号是否已经存在 32 if(search_student_info(pstu->num) != NULL) 33 { 34 printf("该学号已经存在学生信息表中.\n"); 35 return 0; 36 } 37 printf("请输入姓名: "); 38 getchar(); 39 gets(pstu->name); 40 printf("请输入性别: "); 41 scanf("%s",pstu->sex); 42 printf("请输入年龄: "); 43 scanf("%d",&pstu->age); 44 printf("请输入英语成绩: "); 45 scanf("%d",&pstu->english); 46 printf("请输入数学成绩: "); 47 scanf("%d",&pstu->math); 48 printf("请输入计算机成绩: "); 49 scanf("%d",&pstu->computer); 50 pstu->average = (pstu->english + pstu->math + pstu->computer)/3; 51 //每次从学生信息链表的头部插入; 52 pstu->next = student_list->next; 53 student_list->next = pstu; 54 return 1; 55 } 56 //根据学号删除学生信息 57 int delete_student_info(int num) 58 { 59 student_info *pstu; 60 student_info *qstu; 61 if(search_student_info(num) == NULL) 62 { 63 printf("不存在该学好为%d的学生信息.\n",num); 64 return 0; 65 } 66 pstu = student_list->next; 67 qstu = student_list; 68 while(pstu->num != num) 69 { 70 qstu = pstu; 71 pstu = pstu->next; 72 } 73 qstu->next = pstu->next; 74 free(pstu); 75 return 1; 76 } 77 //根据学号修改学生信息 78 int modify_student_info(int num) 79 { 80 int choice; 81 student_info *pstu = search_student_info(num); 82 if(pstu == NULL) 83 { 84 printf("不存在该学好为%d的学生信息.\n",num); 85 return 0; 86 } 87 printf("1.姓名 2.性别 3.年龄 4.英语成绩 5.数学成绩 6.计算机成绩.\n"); 88 printf("请选择修改的信息: "); 89 scanf("%d",&choice); 90 switch(choice) 91 { 92 case 1: 93 printf("请输入新的姓名: "); 94 getchar(); 95 gets(pstu->name); 96 break; 97 case 2: 98 printf("请输入新的性别: "); 99 scanf("%s",pstu->sex);100 break;101 case 3:102 printf("请输入新的年龄: ");103 scanf("%d",&pstu->age);104 break;105 case 4:106 printf("请输入新的英语成绩: ");107 scanf("%d",&pstu->english);108 break;109 case 5:110 printf("请输入新的数学成绩: ");111 scanf("%d",&pstu->math);112 break;113 case 6:114 printf("请输入新的计算机成绩: ");115 scanf("%d",&pstu->computer);116 break;117 default:118 printf("请按提示要求操作.\n");119 }120 return 1;121 }122 //根据学号查找学生信息123 student_info* search_student_info(int num)124 {125 student_info *pstu;126 pstu = student_list->next;127 while(pstu && pstu->num != num)128 {129 130 pstu = pstu->next;131 }132 return pstu;133 }134 //输出每个学生的平均成绩135 void display_average()136 {137 student_info *pstu;138 pstu = student_list->next;139 while(pstu)140 {141 printf("学号为%d,姓名为%s的学生平均成绩为: %d\n",pstu->num,pstu->name,pstu->average);142 pstu = pstu->next;143 }144 }145 //显示所有学生信息146 void display_student_info()147 {148 student_info *pstu;149 pstu = student_list->next;150 printf("所有学生信息如下所示.\n");151 printf("学号\t姓名\t性别\t年龄\t英语\t数学\t计算机\t平均成绩.\n");152 while(pstu)153 {154 printf("%d\t",pstu->num);155 printf("%s\t",pstu->name);156 printf("%s\t",pstu->sex);157 printf("%d \t",pstu->age);158 printf("%d \t",pstu->english);159 printf("%d \t",pstu->math);160 printf("%d \t",pstu->computer);161 printf("%d\n",pstu->average);162 pstu = pstu->next;163 }164 }165 //将学生信息保存到文件166 int save_file()167 {168 FILE *pfile;169 student_info *pstu;170 pfile = fopen("student.txt","w");171 if(pfile == NULL)172 {173 printf("打开文件失败.\n");174 return 0;175 }176 pstu = student_list->next;177 while(pstu)178 {179 fprintf(pfile,"%5d%15s%9s%3d%4d%4d%4d%4d",pstu->num,pstu->name,pstu->sex,pstu->age,180 pstu->english,pstu->math,pstu->computer,pstu->average);181 pstu = pstu->next;182 }183 fclose(pfile);184 return 1;185 }186 187 //从文件中读取学生信息188 int read_file()189 {190 FILE *pfile;191 student_info *pstu;192 pfile = fopen("student.txt","r");193 if(pfile == NULL)194 {195 printf("打开文件失败.\n");196 return 0;197 }198 while(!feof(pfile))199 {200 pstu = (student_info*)malloc(sizeof(student_info));201 fscanf(pfile,"%5d%15s%9s%4d%4d%4d%4d%4d",&pstu->num,pstu->name,pstu->sex,&pstu->age,202 &pstu->english,&pstu->math,&pstu->computer,&pstu->average);203 pstu->average = (pstu->english + pstu->math + pstu->computer)/3;204 //每次从学生信息链表的头部插入;205 pstu->next = student_list->next;206 student_list->next = pstu;207 }208 fclose(pfile);209 return 1;210 }

主函数main.c文件进行测试调用,如下所示:

1 #include "student.h"  2 #include 
3 #include
4 5 void menu(); 6 7 //学生信息链表 8 student_info* student_list; 9 10 //用户可以选择1-7可以分别进行学生信息的查看、添加、删除,修改,计算平均成绩,保存,退出系统操作。 11 int main() 12 { 13 int choice; 14 int num; 15 printf("**************************\n"); 16 printf("欢迎使用学生信息管理系统\n"); 17 printf("**************************\n"); 18 printf("-----------------------------\n"); 19 init_student_info_list(); 20 if(read_file()) 21 printf("从文件中读取学生信息成功.\n"); 22 else 23 printf("从文字中读取学生信息失败.\n"); 24 printf("-----------------------------\n"); 25 menu(); 26 while(1) 27 { 28 printf("请选择操作: "); 29 scanf("%d",&choice); 30 switch(choice) 31 { 32 case 1: 33 if(student_list_empty()) 34 printf("学生信息表为空,请先添加学生信息.\n"); 35 else 36 display_student_info(); 37 break; 38 case 2: 39 if(add_student_info()) 40 printf("添加学生信息成功.\n"); 41 else 42 printf("添加学生信息失败.\n"); 43 break; 44 case 3: 45 if(student_list_empty()) 46 printf("学生信息表为空,请先添加学生信息.\n"); 47 else 48 { 49 printf("请输入要删除学生信息的学号: "); 50 scanf("%d",&num); 51 if(delete_student_info(num)) 52 printf("成功删除该学号对应的学生信息.\n"); 53 else 54 printf("删除失败.\n"); 55 } 56 break; 57 case 4: 58 if(student_list_empty()) 59 printf("学生信息表为空,请先添加学生信息.\n"); 60 else 61 { 62 printf("请输入要修改学生信息的学号: "); 63 scanf("%d",&num); 64 if(modify_student_info(num)) 65 printf("成功修改该学号对应的学生信息.\n"); 66 else 67 printf("修改失败.\n"); 68 } 69 break; 70 case 5: 71 if(student_list_empty()) 72 printf("学生信息表为空,请先添加学生信息.\n"); 73 else 74 display_average(); 75 break; 76 case 6: 77 if(student_list_empty()) 78 printf("学生信息表为空,请先添加学生信息.\n"); 79 else 80 if(save_file()) 81 printf("保存学生信息成功.\n"); 82 else 83 printf("保存学生信息失败.\n"); 84 break; 85 case 0: 86 printf("欢迎下次使用,再见.\n"); 87 system("pause"); 88 exit(0); 89 break; 90 default: 91 printf("输入错误,请重新选择操作.\n"); 92 } 93 } 94 system("pause"); 95 return 0; 96 } 97 98 void menu() 99 {100 printf("1.查看学生信息.\n");101 printf("2.添加学生信息.\n");102 printf("3.删除学生信息.\n");103 printf("4.修改学生信息.\n");104 printf("5.输出平均成绩.\n");105 printf("6.保存学生信息.\n");106 printf("0.退出系统操作.\n");107 }

程序执行结果如下所示:

(1)第一次执行没有学生信息,读取文件失败。

(2)以后执行先从文件中读取学生信息,然后进行操作。

转载地址:https://blog.csdn.net/weixin_34038652/article/details/90628464 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:GridFS
下一篇:千里之堤,毁于蚁穴----考试系统

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月12日 19时00分19秒