C语言课程设计 学生成绩管理系统
- 格式:doc
- 大小:146.50 KB
- 文档页数:19
#include <stdio.h> //标准输入/输入函数库//#include <stdlib.h> //标准函数库//#include <string.h> //字符串函数库//#define TITLE " 学生成绩管理系统" //标题文字// #define MAX 10#define MENU_MAIN_COUNT 8 //主菜单的选项个数//#define MENU_SEARCH_COUNT 4 //查询子菜单的选项个数//#define MENU_CALC_COUNT 3 //计算子菜单的选项个数//typedef struct student{char name[MAX];//姓名//char num[MAX];//学号//char sex[MAX];//性别//int chinese;//语文成绩int mathematic;//数学成绩//int english;//英语成绩//int computer;//计算机成绩//struct student *next;//指向下一个学生的指针//}stu;//定义一个头结点,将其初始化为空。
stu* head=NULL;//*student结构体链表的头结点//void input_record(); //输入学生成绩的处理//void show_record(); //显示学生成绩的处理//void search_record(); //查询学生成绩的处理//void update_record(); //更新学生成绩//void delete_record(); //删除学生成绩//void calculate(); //计算学生成绩//void save_to_file(); //保存到文件的处理//void exit_system(); //退出系统//void search_by_id();//通过学号检索学生的处理//void search_by_name();//通过姓名检索学生的处理//void search_by_sex();//通过性别检索学生的处理//void search_exit();//退出子菜单,返回上级菜单//void calc_total();//计算总成绩的处理//void calc_average();//计算平均成绩的处理//void calc_exit();//退出子菜单,返回上级菜单//void create_stu_by_input(stu* pNewStu);//通过输入student为赋值//stu* get_last_student(stu* p);//找到最后一个学生的记录//void clear_record(stu* p);//void print_menu_main();//显示主菜单//void print_menu_title(char* title);//显示菜单的标题//void print_table_head();//显示学生记录的表格的头部//void print_table_row(stu* p);//显示一个学生的记录//void print_table_buttom();//显示学生记录的表格的底部//void print_table_head_total();//显示总分表格的头部//void print_table_row_total(stu* p);//显示一个学生的总分//void print_table_buttom_total();//显示总分表格的底部//void print_table_head_avg();//显示平均分表格的头部//void print_table_row_avg(stu* p);//显示一个学生的平均分//void print_table_buttom_avg();//显示平均分表格的底部//char menu_main[]=" | 1 输入学生成绩| \n " " | 2 显示学生成绩| \n " " | 3 查询学生成绩| \n " " | 4 更新学生成绩| \n " " | 5 删除学生成绩| \n " " | 6 计算学生成绩| \n " " | 7 保存文件| \n " " | 8 退出系统| \n " ;void (* menu_main_func[]) ()={input_record,show_record,search_record,update_record,delete_record,calculate,save_to_file,exit_system};char menu_search[]=" | | \n" " | | \n" " | 1 按照学号查询| \n" " | 2 按照姓名查询| \n" " | 3 按照性别查询| \n" " | 4 返回上级菜单| \n" " | | \n" " | | \n";void (* menu_search_func[]) ()={search_by_id,search_by_name,search_by_sex,search_exit};char menu_calc[]=" | | \n" " | 1 计算总成绩| \n" " | 2 计算平均分| \n" " | 3 返回上级菜单| \n" " | | \n";void (* menu_calc_func[]) () ={calc_total,calc_average,calc_exit};int main(){print_menu_main();//显示主菜单等待用户输入//}void input_record()//000{char continue_input = 'N';stu* pLastStu = NULL;stu* pNewStu = (stu *)malloc(sizeof(stu) );//创建一个stu* pNewStu ->next = NULL;create_stu_by_input(pNewStu);//让用户为创建的stu赋值if (head == NULL){head =pNewStu ;}else{pLastStu = get_last_student(head);//找到最后一个pLastStu->next = pNewStu;}printf("继续输入学生成绩?(Y 继续,N 返回菜单)");getchar();continue_input = getchar();if (continue_input == 'n' || continue_input == 'N'){print_menu_main();//不继续输入,将显示主菜单}else{input_record();//再次调用这个函数输入新的学生成绩}}void show_record()//000{stu*p=head;print_table_head();//显示学生成绩的表格的表头////逐条显示学生记录//while(p!=NULL){print_table_row(p);//显示一个学生信息//p=p->next;}print_table_buttom();//显示表格尾//printf("按任意键返回菜单..\n");getchar();getchar();print_menu_main();}void search_record()//000{int selected=0;system("cls");print_menu_title(" 查询学生成绩");printf(menu_search);printf(" ========================================\n");while(!(selected>=1&&selected<=MENU_SEARCH_COUNT)){printf("\n\n请选择");scanf("%d",&selected);if(selected>=1&&selected<=MENU_SEARCH_COUNT){break;}printf("\n>输入错误!(请选择1-%d)\n",MENU_SEARCH_COUNT);}menu_search_func[selected-1]();//调用用户选择项所对应的函数//}void search_by_id()//000{char id[MAX];char continue_input='N';stu*p=head;int isfound=0;printf(">请输入学生学号:");scanf("%s",id);printf("\n>查找[%s]...\n",id);print_table_head();while (p!=NULL){if(strcmp(p->num,id)==0){print_table_row(p);isfound=1;break;}p=p->next;}if(!isfound)printf("\n!没有找到结果\n");print_table_buttom();printf("继续查找?(Y继续,N返回)");getchar();continue_input=getchar();if(continue_input=='Y'||continue_input=='y'){search_by_id();//继续调用这个函数来查找// }else{search_record();//重新显示查询子菜单,即返回菜单// }}void search_by_name()//000{char name[MAX];char continue_input ='N';stu* p = head;int isfound = 0;printf(">请输入学生姓名:");scanf("%s",name);printf("\n>查找[%s]...\n",name);print_table_head();while (p!=NULL){if(strcmp(p->name,name)==0){print_table_row(p);isfound=1;}p=p->next;}if(!isfound)printf("\n!没有找到结果\n");print_table_buttom();printf("继续查找?(Y继续,N返回)");getchar();continue_input=getchar();if(continue_input=='Y'||continue_input=='y') {search_by_name();}else{search_record();}}void search_by_sex()//000{char sex[MAX];char continue_input='N';stu*p=head;int isfound=0;printf(">请输入学生性别:");scanf("%s",sex);printf("\n>查找[%s]...\n",sex);print_table_head();while (p!=NULL){if(strcmp(p->sex,sex)==0){print_table_row(p);isfound=1;}p=p->next;}if(!isfound)printf("\n!没有找到结果\n");print_table_buttom();printf("继续查找?(Y继续,N返回)");getchar();continue_input=getchar();if(continue_input=='Y'||continue_input=='y') {search_by_sex();}else{search_record();}}void search_exit()//000{print_menu_main();}void update_record()//000{stu* p = head;char id[MAX];char continue_input = 'N';printf("请输入要更新的学生学号:");scanf("%s",id);while (p != NULL){if(strcmp( p->num,id) == 0 ){break;}p = p->next;}if(p == NULL){printf("没有学号是[%s]的学生",id);}else{create_stu_by_input(p);}printf("继续更新麽?(Y 继续,N 返回菜单)"); getchar();continue_input = getchar();if (continue_input == 'n'|| continue_input == 'N') {print_menu_main();}else{update_record ();}}void delete_record()//000{stu* p = head;stu* pPre = NULL;char id[MAX];char continue_input = 'N';printf("请输入要删除的学生的学号:");scanf("%s",id);while(p != NULL){if(strcmp(p->num,id) == 0){break;}p = p->next;}if(p == NULL){printf("没有学号是[%d]的学生",id);}else{printf("确定要删除学号为[%s]姓名为[%s]的学生吗?(Y 确定,N 取消)",p->num,p->name);getchar();continue_input = getchar();if (continue_input == 'Y' || continue_input == 'y'){pPre = head;if(pPre == p){head = p->next;free(p);}else{while (pPre != NULL){if(pPre->next == p){pPre->next = p->next;free(p);break;}pPre = pPre->next;}}printf("删除成功!\n");}}printf("继续删除吗?(Y 继续,N 返回菜单)");getchar();continue_input = getchar();if(continue_input =='N' ||continue_input =='n'){print_menu_main();}else{delete_record();}}void calculate()//000{int selected = 0;system("cls");print_menu_title(" 计算学生成绩");printf(menu_calc);printf(" ============================================\n"); while ( !(selected >= 1 && selected <= MENU_CALC_COUNT) ){printf("\n\n请选择:");scanf("%d",&selected);if(selected >= 1 && selected <= MENU_CALC_COUNT){break;}printf("\n输入错误!(请选择1 - %d)\n",MENU_CALC_COUNT); }menu_calc_func[selected-1]();//调用选择的子菜单所对应的函数}void calc_total()//0000{stu*p = head;print_table_head_total();while(p !=NULL){print_table_row_total(p);p = p->next;}print_table_buttom_total();printf("按任意键返回菜单.....\n");getchar();getchar();calculate();}void calc_average(){stu*p = head;print_table_head_avg();while (p != NULL){print_table_row_avg(p);p = p->next;}print_table_buttom_avg();printf("按任意键返回菜单。