学生成绩管理系统(数据结构C语言版源代码)_第1页
学生成绩管理系统(数据结构C语言版源代码)_第2页
学生成绩管理系统(数据结构C语言版源代码)_第3页
学生成绩管理系统(数据结构C语言版源代码)_第4页
学生成绩管理系统(数据结构C语言版源代码)_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

勇者,必以决斗之勇气与五张试卷一决雌雄;懦夫,概以鼠目之寸光量人生此战必输无疑!#include<stdio.h>#include<string.h>#include<stdlib.h>structstudents{ charSex[3];/*字符型学生性别*/ doubleEnglish;/*双精度实型英语成绩*/ doubleJava;/*双精度实型Java成绩*/ doubleSjjg;/*双精度实数据结构*/ doubleSzdl;/*双精度实型数字电路*/ doubleJsj;/*计算机组成原理*/ structstudents*next;/*用与构建连表指向下一结点*/}; FILE*fp;/*定义全局变量fp*/voidRevisemenu();/*修改菜单*/voidSortmenu();/*排序菜单*/voidmenu();/*主菜单*/voidsecret();/*安全验证*/structstudents*Input();/*新建学生信息*/voidfprint(structstudents*head);/*将信息导入文件可追加*/voidfprint_(structstudents*head);/*将信息导入文件并覆盖*/voidBrowse(structstudents*head);/*浏览全部学生信息*/structstudents*create(structstudents*headint*n);/*从tushu_list中读取数据构建链表*/voidSortEnglish(structstudents*head);/*按英语成绩排序*/voidSortJava(structstudents*head);/*按Java成绩排序*/voidSortSjjg(structstudents*head);/*按数据结构成绩排序*/voidSortSzdl(structstudents*head);/*按数字逻辑电路成绩排序*/voidSortJsj(structstudents*head);/*按计算机组成原理成绩排序*/structstudents*Delete(structstudents*headstructstudents*Revise();/*修改学生信息(按编号修改)*//*主菜单*/voidmenu(){ printf("\n\n"); printf("***************************************************\n"); printf("学生成绩管理系统\n"); printf("1-添加新同学2-浏览学生信息\n"); printf("5-按成绩排序6-修改学生信息\n"); printf("7-删除学生信息0-退出系统\n"); printf("___________________________________________________\n");}/*排序菜单*/voidSortmenu(){ printf("\n\n"); printf("***************************************************\n"); printf("按成绩排序\n"); printf("1-大学英语2-JAVA编程\n"); printf("3-数据结构4-数字逻辑电路\n"); printf("5-计算机组成原理0-返回上级菜单\n"); printf("***************************************************\n");}/*修改菜单*/voidRevisemenu(){ printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf("3--修改学生性别4--修改英语成绩\n");printf("5--修改JAVA成绩6--修改数据结构\n");printf("7--修改数字电路8--修改计算计\n"); printf("0--返回上级菜单\n");printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");}/*安全验证*/voidsecret(){ chara[20]; printf("**欢迎来到学生信息管理系统进入系统前请先进行密码验证---"); printf(""); do{ gets(a);/*输入密码*/ system("cls");/*调用库函数清屏*/ printf("对不起!您输入的密码有误请重新输入---"); }while(strcmp(a"0605")!=0);/*单一密码"0605"*/ system("cls");}/*新建学生信息*/structstudents*Input(){ structstudents*p1*p2*head; /*建立辅助结点及头结点*/ charName; intn=0x; printf("\n请按对应项输入学生信息以#结束:\n"); p1=(structstudents*)malloc(sizeof(structstudents)); head=p2=p1; do{/*使用dowhile语句输入学生信息*/ 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=(structstudents*)malloc(sizeof(structstudents)); 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"); returnhead;/*返回头指针*/}/*将信息导入文件可追加*/voidfprint(structstudents*head){ structstudents*p1; if((fp=fopen("students_list.txt""a"))==NULL) { printf("Fileopenerror!\n"); exit(0); } for(p1=head;p1->next!=NULL;p1=p1->next)/*遍历*/ fprintf(fp"%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" p1->Namep1->Nump1->Sexp1->Englishp1->Javap1->Sjjgp1->Szdlp1->Jsj);/*将学生信息写入文件*/ fclose(fp);/*关闭文件*/ printf("\n学生信息已成功保存到文件students_list.txt中!\n"); getchar();}/*将信息导入文件并覆盖*/voidfprint_(structstudents*head){ structstudents*p1; if((fp=fopen("students_list.txt""w"))==NULL) { printf("Fileopenerror!\n"); exit(0); } for(p1=head;p1!=NULL;p1=p1->next)/*遍历*/ fprintf(fp"%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" p1->Namep1->Nump1->Sexp1->Englishp1->Javap1->Sjjgp1->Szdlp1->Jsj);/*将学生信息写入文件*/ fclose(fp);/*关闭文件*/; getchar();}/*浏览全部学生信息*/voidBrowse(structstudents*head){ charSex[3];/*字符型学生性别*/ doubleEnglish;/*双精度实型英语成绩*/ doubleJava;/*双精度实型Java成绩*/ doubleSjjg;/*双精度实数据结构*/ doubleSzdl;/*双精度实型数字电路*/ doubleJsj;/*计算机组成原理*/ if((fp=fopen("students_list.txt""a+"))==NULL) { printf("Fileopenerror!\n"); exit(0); } while(!feof(fp))/*读取并输出*/{ fscanf(fp"%s%s%s%lf%lf%lf%lf%lf"NameNumSex&English&Java&Sjjg&Szdl&Jsj); printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" NameNumSexEnglishJavaSjjgSzdlJsj); }; if(fclose(fp)) { printf("Cannotclosethefile!\n"); exit(0); }}/*从tushu_list中读取数据构建链表*/structstudents*create(structstudents*headint*n){ FILE*fp; structstudents*p*p1*p2; if((fp=fopen("students_list.txt""a+"))==NULL) { printf("Fileopenerror!\n"); exit(0); } while(!feof(fp)) { (*n)++;p=(structstudents*)malloc(sizeof(structstudents)); 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); returnhead;}voidFindofName(structstudents*head){ inti=0n=0; charb[20]; structstudents*p; head=create(head&n); p=head; scanf("%s"b); while(p!=NULL){ if(strcmp(p->Nameb)==0){ printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj); i++; } p=p->next; } if(i==0) printf("\n对不起!没有找到名为"%s"的学生信息!\n"b);}voidFindofNum(structstudents*head){ inti=0n; charb[20]; structstudents*p; head=create(head&n); p=head; scanf("%s"b); while(p!=NULL){ if(strcmp(p->Numb)==0){ printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj); i++; } p=p->next; } if(i==0)b);}/*按英语成绩排序*/voidSortEnglish(structstudents*head){ structstudents*p*tail;/*定义中间变量*/ intn; doubleEnglish; p=(structstudents*)malloc(sizeof(structstudents)); head=create(head&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("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" 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("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj); tail->next=NULL; } } p=head;/*将链表赋给结构体指针*/ printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);/*浏览排序后的信息*/ printf("按英语成绩排序后输出如上(注:此过程不保存至文件):\n"); return;}/*按JAVA成绩排序*/voidSortJava(structstudents*head){ structstudents*p*tail;/*定义中间变量*/ intn; doubleJava; p=(structstudents*)malloc(sizeof(structstudents)); head=create(head&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("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" 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("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj); tail->next=NULL; } } p=head;/*将链表赋给结构体指针*/ printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);/*浏览排序后的信息*/ printf("按Java成绩排序后输出如上(注:此过程不保存至文件):\n"); return;}/*按数据结构排序*/voidSortSjjg(structstudents*head){ structstudents*p*tail;/*定义中间变量*/ intn; doubleSjjg; p=(structstudents*)malloc(sizeof(structstudents)); head=create(head&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("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" 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->Sjjg==Sjjg){ /*成绩相同时无需比较*/ printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj); tail->next=NULL; } } p=head;/*将链表赋给结构体指针*/ printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);/*浏览排序后的信息*/ printf("按数据结构成绩排序后输出如上(注:此过程不保存至文件):\n"); return;}/*按数字电路排序*/voidSortSzdl(structstudents*head){ structstudents*p*tail;/*定义中间变量*/ intn; doubleSzdl; p=(structstudents*)malloc(sizeof(structstudents)); head=create(head&n); while(head->next!=NULL)/*利用选择法排序*/ { tail=NULL; p=head; Szdl=p->Szdl;/*将链表中第一个成绩赋给Szdl*/ while(p!=NULL) { if((p->Szdl)>Szdl)/*比较*/ Szdl=p->Szdl; tail=p; p=p->next; } tail=NULL; p=head; while(p->next!=NULL) { if(p->Szdl==Szdl){ printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" 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->Szdl==Szdl){ /*成绩相同时无需比较*/ printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj); tail->next=NULL; } } p=head;/*将链表赋给结构体指针*/ printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);/*浏览排序后的信息*/ printf("按数字电路成绩排序后输出如上(注:此过程不保存至文件):\n"); return;}/*按计算机组成原理排序*/voidSortJsj(structstudents*head){ structstudents*p*tail;/*定义中间变量*/ intn; doubleJsj; p=(structstudents*)malloc(sizeof(structstudents)); head=create(head&n); while(head->next!=NULL)/*利用选择法排序*/ { tail=NULL; p=head; Jsj=p->Jsj;/*将链表中第一个成绩赋给Jsj*/ while(p!=NULL) { if((p->Jsj)>Jsj)/*比较*/ Jsj=p->Jsj; tail=p; p=p->next; } tail=NULL; p=head; while(p->next!=NULL) { if(p->Jsj==Jsj){ printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" 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->Jsj==Jsj){ /*成绩相同时无需比较*/ printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj); tail->next=NULL; } } p=head;/*将链表赋给结构体指针*/ printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);/*浏览排序后的信息*/ printf("按计算机组成原理成绩排序后输出如上(注:此过程不保存至文件):\n"); return;}structstudents*Delete(structstudents*headcharm[15]){ structstudents*ptr1*ptr2; intn;printf("\n所有学生信息如下:\n"); Browse(head); scanf("%s"m); head=create(head&n); if(head==NULL){ printf("无学生信息!\n"); returnhead; } if((strcmp(head->Numm)==0)&&head!=NULL) { ptr2=head; head=head->next; free(ptr2); } if(strcmp(head->Numm)!=0){ ptr1=head; ptr2=head->next; while(ptr2!=NULL){ if(strcmp(ptr2->Numm)==0){ ptr1->next=ptr2->next; free(ptr2); } else ptr1=ptr2; ptr2=ptr1->next; } } fprint_(head);并保存至文件!\n"m); returnhead;}/*修改学生信息(按编号修改)*/structstudents*Revise(){ intn=0t;charnum[10]; charSex[3];/*字符型学生性别*/ doubleEnglish;/*双精度实型英语成绩*/ doubleJava;/*双精度实型Java成绩*/ doubleSjjg;/*双精度实数据结构*/ doubleSzdl;/*双精度实型数字电路*/ doubleJsj;/*计算机组成原理*/structstudents*head=NULL;structstudents*p;printf("\n所有学生信息如下:\n"); Browse(head); head=create(head&n); scanf("%s"num); p=head; while(head!=NULL) { if(strcmp(p->Numnum)==0) { system("cls"); Revisemenu(); printf("编号为%s的学生信息如下:\n"num); printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj); while(1){ printf("请选择需要修改的信息:"); scanf("%d"&t); switch(t){ case1: scanf("%s"Name); strcpy(p->NameName); break; case2: scanf("%s"&Num); strcpy(p->NumNum); break; case3: printf("请输入新性别:"); scanf("%s"Sex); strcpy(p->SexSex); break; case4: printf("请输入新英语成绩:"); scanf("%lf"&English); p->English=English; break; case5: printf("请输入新Java成绩:"); scanf("%lf"&Java); p->Java=Java; break; case6: printf("请输入新数据结构成绩:"); scanf("%lf"&Sjjg); p->Sjjg=Sjjg; break; case7: printf("请输入新数字电路成绩:"); scanf("%lf"&Szdl); p->S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论