1、学生成绩管理系统数据结构C语言版源代码相信自己,世界上没有不可攀越的高峰。#include#include#includestruct students char Num10; /*字符型学生学号*/ char Name20; /*字符型学生姓名*/ char Sex3; /*字符型学生性别*/ double English; /*双精度实型英语成绩*/ double Java; /*双精度实型Java成绩*/ double Sjjg; /*双精度实数据结构*/ double Szdl; /*双精度实型数字电路*/ double Jsj; /*计算机组成原理*/ struct students
2、 *next; /*用与构建连表指向下一结点*/; FILE *fp; /*定义全局变量fp*/void Revisemenu();/*修改菜单*/void Sortmenu();/*排序菜单*/void menu();/*主菜单*/void secret();/*安全验证*/struct students * Input();/*新建学生信息*/void fprint(struct students *head);/*将信息导入文件可追加*/void fprint_(struct students *head);/*将信息导入文件并覆盖*/void Browse(struct student
3、s *head);/*浏览全部学生信息*/struct students * create(struct students *headint *n);/*从tushu_list中读取数据构建链表*/void FindofNum(struct students *head);/*按学号查询学生信息*/void FindofNname(struct students *head);/*按姓名查询学生信息*/void SortEnglish(struct students * head);/*按英语成绩排序*/void SortJava(struct students * head);/*按Java
4、成绩排序*/void SortSjjg(struct students * head);/*按数据结构成绩排序*/void SortSzdl(struct students * head);/*按数字逻辑电路成绩排序*/void SortJsj(struct students * head);/*按计算机组成原理成绩排序*/struct students * Delete(struct students * headchar m15);/*按学号删除学生成绩信息*/struct students * Revise();/*修改学生信息(按编号修改)*/*主菜单*/void menu() pri
5、ntf(nn); printf(*n); printf( 学生成绩管理系统 n); printf(-n); printf( 1-添加新同学 2-浏览学生信息 n); printf( 3-按学号查询 4-按姓名查询 n); printf( 5-按成绩排序 6-修改学生信息 n); printf( 7-删除学生信息 0-退出系统 n); printf(-n); printf(_n);/*排序菜单*/void Sortmenu() printf(nn); printf(*n); printf( 按成绩排序 n); printf( 1-大学英语 2-JAVA编程 n); printf( 3-数据结构
6、4-数字逻辑电路 n); printf( 5-计算机组成原理 0-返回上级菜单 n); printf(*n);/*修改菜单*/void Revisemenu() printf(nn); printf( 1-修改学生姓名 2-修改学生学号 n); printf( 3-修改学生性别 4-修改英语成绩 n); printf( 5-修改JAVA成绩 6-修改数据结构 n); printf( 7-修改数字电路 8-修改计算计 n); printf( 0-返回上级菜单 n); printf(nn);/*安全验证*/void secret() char a20; printf(*欢迎来到学生信息管理系统进入
7、系统前请先进行密码验证-); printf( ); do gets(a); /*输入密码*/ system(cls); /*调用库函数清屏*/ printf(对不起!您输入的密码有误请重新输入-); while(strcmp(a0605)!=0); /*单一密码0605*/ system(cls);/*新建学生信息*/struct students * Input() struct students *p1*p2*head; /*建立辅助结点及头结点*/ char Name; int n=0x; printf(n请按对应项输入学生信息以#结束:n); printf(姓名 学号 性别 英语 Ja
8、va 数据结构 数字电路 计算机组成原理n); p1=(struct students *)malloc(sizeof(struct students); head=p2=p1; do /*使用do while语句输入学生信息*/ scanf(%s&p1-Name); if(strcmp(p1-Name#)=0)break; /*判断结束符*/ else scanf(%s%s%lf%lf%lf%lf%lf p1-Nump1-Sex&p1-English&p1-Java&p1-Sjjg&p1-Szdl&p1-Jsj); Name=#; p1=(struct students *)malloc(s
9、izeof(struct students); p2-next=p1; p2=p1; n+; while(1); p1-next=NULL; printf(学生信息输入结束!n); getchar(); printf(是否保存学生信息?(1.是/2.否):); scanf(%d&x); if(x=1) fprint(head); /*调用函数保存至文件*/ else printf(n文件没有被保存!n); return head; /*返回头指针*/*将信息导入文件可追加*/void fprint(struct students *head) struct students *p1; if(f
10、p=fopen(students_list.txta)=NULL) printf(File open error!n); exit(0); for(p1=head;p1-next!=NULL;p1=p1-next) /*遍历*/ fprintf(fp%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn p1-Namep1-Nump1-Sexp1-Englishp1-Javap1-Sjjgp1-Szdlp1-Jsj);/*将学生信息写入文件*/ fclose(fp); /*关闭文件*/ printf(n学生信息已成功保存到文件 students_list.txt 中!n
11、); getchar();/*将信息导入文件并覆盖*/void fprint_(struct students *head) struct students *p1; if(fp=fopen(students_list.txtw)=NULL) printf(File open error!n); exit(0); for(p1=head;p1!=NULL;p1=p1-next) /*遍历*/ fprintf(fp%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn p1-Namep1-Nump1-Sexp1-Englishp1-Javap1-Sjjgp1-Szdlp1
12、-Jsj);/*将学生信息写入文件*/ fclose(fp); /*关闭文件*/; getchar();/*浏览全部学生信息*/void Browse(struct students *head) char Num10; /*字符型学生学号*/ char Name20; /*字符型学生姓名*/ char Sex3; /*字符型学生性别*/ double English; /*双精度实型英语成绩*/ double Java; /*双精度实型Java成绩*/ double Sjjg; /*双精度实数据结构*/ double Szdl; /*双精度实型数字电路*/ double Jsj; /*计算机
13、组成原理*/ if(fp=fopen(students_list.txta+)=NULL) printf(File open error!n); exit(0); printf(-n); printf(姓名 学号 性别 英语 Java 数据结构 数字电路 计算机n); while(!feof(fp)/*读取并输出*/ fscanf(fp%s%s%s%lf%lf%lf%lf%lfNameNumSex&English&Java&Sjjg&Szdl&Jsj); printf(%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn NameNumSexEnglishJavaSj
14、jgSzdlJsj); ; if(fclose(fp) printf(Can not close the file!n); exit(0); /*从tushu_list中读取数据构建链表*/struct students * create(struct students * headint *n) FILE *fp; struct students*p*p1*p2; if(fp=fopen(students_list.txta+)=NULL) printf(File open error!n); exit(0); while(!feof(fp) (*n)+; p=(struct student
15、s *)malloc(sizeof(struct students); fscanf(fp%s%s%s%lf%lf%lf%lf%lf p-Namep-Nump-Sex&p-English&p-Java&p-Sjjg&p-Szdl&p-Jsj); if(head=NULL) head=p; p1=p; else p1-next=p; p2=p1; p1=p; p2-next=NULL; free(p); (*n)-; fclose(fp); return head;/*按姓名查询学生信息*/void FindofName(struct students *head) int i=0n=0; ch
16、ar b20; struct students *p; head=create(head&n); p=head; printf(n请输入要查询的学生姓名:); scanf(%sb); while(p!=NULL) if(strcmp(p-Nameb)=0) printf(姓名 学号 性别 英语 Java 数据结构 数字电路 计算机n); printf(%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn p-Namep-Nump-Sexp-Englishp-Javap-Sjjgp-Szdlp-Jsj); i+; p=p-next; if(i=0) printf(n对不
17、起!没有找到名为%s的学生信息!nb);/*按学号查询学生信息*/void FindofNum(struct students *head) int i=0n; char b20; struct students *p; head=create(head&n); p=head; printf(n请输入要查询的学生学号:); scanf(%sb); while(p!=NULL) if(strcmp(p-Numb)=0) printf(姓名 学号 性别 英语 Java 数据结构 数字电路 计算机n); printf(%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn p
18、-Namep-Nump-Sexp-Englishp-Javap-Sjjgp-Szdlp-Jsj); i+; p=p-next; if(i=0) printf(n对不起!没有找到学号为%s学生信息!nb);/*按英语成绩排序*/void SortEnglish(struct students * head) struct students *p*tail; /*定义中间变量*/ int n; double English; p=(struct students *)malloc(sizeof(struct students); head=create(head&n); printf(姓名 学号
19、性别 英语 Java 数据结构 数字电路 计算机n); while(head-next!=NULL) /*利用选择法排序*/ tail=NULL; p=head; English=p-English; /*将链表中第一个成绩赋给English*/ while(p!=NULL) if(p-English)English)/*比较*/ English=p-English; tail=p; p=p-next; tail=NULL; p=head; while(p-next!=NULL) if(p-English=English) printf(%st%st%st%.1lft%.1lft%.1lft%
20、.1lft%.1lfn p-Namep-Nump-Sexp-Englishp-Javap-Sjjgp-Szdlp-Jsj); if(p=head) head=head-next; else tail-next=p-next; tail=p; p=p-next; if(p-English=English) /*分数相同时无需比较*/ printf(%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn p-Namep-Nump-Sexp-Englishp-Javap-Sjjgp-Szdlp-Jsj); tail-next=NULL; p=head; /*将链表赋给结构体指
21、针*/ printf(%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn p-Namep-Nump-Sexp-Englishp-Javap-Sjjgp-Szdlp-Jsj);/*浏览排序后的信息*/ printf(按英语成绩排序后输出如上(注:此过程不保存至文件):n); return;/*按JAVA成绩排序*/void SortJava(struct students * head) struct students *p*tail; /*定义中间变量*/ int n; double Java; p=(struct students *)malloc(sizeof(
22、struct students); head=create(head&n); printf(姓名 学号 性别 英语 Java 数据结构 数字电路 计算机n); while(head-next!=NULL) /*利用选择法排序*/ tail=NULL; p=head; Java=p-Java; /*将链表中第一个成绩赋给Java*/ while(p!=NULL) if(p-Java)Java)/*比较*/ Java=p-Java; tail=p; p=p-next; tail=NULL; p=head; while(p-next!=NULL) if(p-Java=Java) printf(%st
23、%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn p-Namep-Nump-Sexp-Englishp-Javap-Sjjgp-Szdlp-Jsj); if(p=head) head=head-next; else tail-next=p-next; tail=p; p=p-next; if(p-Java=Java) /*成绩相同时无需比较*/ printf(%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn p-Namep-Nump-Sexp-Englishp-Javap-Sjjgp-Szdlp-Jsj); tail-next=NULL;
24、p=head; /*将链表赋给结构体指针*/ printf(%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn p-Namep-Nump-Sexp-Englishp-Javap-Sjjgp-Szdlp-Jsj);/*浏览排序后的信息*/ printf(按Java成绩排序后输出如上(注:此过程不保存至文件):n); return;/*按数据结构排序*/void SortSjjg(struct students * head) struct students *p*tail; /*定义中间变量*/ int n; double Sjjg; p=(struct studen
25、ts *)malloc(sizeof(struct students); head=create(head&n); printf(姓名 学号 性别 英语 Java 数据结构 数字电路 计算机n); while(head-next!=NULL) /*利用选择法排序*/ tail=NULL; p=head; Sjjg=p-Sjjg; /*将链表中第一个成绩赋给Sjjg*/ while(p!=NULL) if(p-Sjjg)Sjjg)/*比较*/ Sjjg=p-Sjjg; tail=p; p=p-next; tail=NULL; p=head; while(p-next!=NULL) if(p-Sjjg=Sjjg) printf(%st%st%st%.1lft%.1lft%.1lft%.1lft%.1lfn p-Namep-Nump-Sexp-Eng