超好的学生成绩管理系统顺序表实现的代码含详细注释哦
学生成绩管理系统=附源码=附源码

题目2学生成绩管理系统一、设计目的与内容1.设计目的用c语言编写一个简单的学生信息管理程序,能实现对学生信息的简单管理。
可以建立函数输入二叉树。
要写明:存储结构、基本算法(可以使用程序流程图)、输入输出、源程序、测试数据和结果、算法的时间复杂度;2.设计内容:建立一个4个学生的信息登记表,每个学生的信息包括:学号,姓名,和3门课程的成绩(FOX,C,ENGLISH)。
程序运行时显示一个简单的菜单,如:(1):信息输入(2):总分统计(3):平均分统计(4):总分排序(5):平均分排序(6):查询其中:(1):对4个学生的信息进行输入;(2):对每个学生的3门课程统计总分;(3):对每个学生的3门课程统计平均分;(4):对4个学生的总分按降序或升序排序并显示出来;(5):对4个学生的平均分按降序或升序排序并显示出来;(6):查询输入一个学号或姓名后,显示出该学生的有关信息;二、算法的基本思想程序分为6个功能模块:信息录入,总分统计,平均分统计,总分排序,平均分排序,查询。
其中总分排序功能模块还设了按总分降序和按总分升序两个菜单, 平均分排序功能模块还设了按平均分降序和按平均分升序两个菜单, 查询功能模块还设了按学号查询和按姓名查询两个菜单。
程度的总体设计思想如下图框架所示:三、测试数据第一个学生:姓名:小张学号:01Fox得分:67C得分:78 ENGLISH得分:87 第二个学生:姓名:小李学号:02Fox得分:66C得分:98 ENGLISH得分:78 第三个学生:姓名:小王学号:03Fox得分:88C得分:78 ENGLISH得分:65 第四个学生:姓名:小陈学号:04Fox得分:65C得分:79 ENGLISH得分:68 如图1-1所示:(图1-1)四、源程序及系统文件使用说明1、进入系统并输入测试数据(如上图1-1)2、测试总分统计(如图1-2)(图1-2)3、测试平均分统计(如图1-3)(图1-3)4、(1)测试总分降序排序(如图1-4)(图1-4)(2)测试总分升序排序(如图1-5)(图1-5)5、(1)测试平均分降序排序(如图1-6)(图1-6)(2)测试平均分升序排序(如图1-7)(图1-7)6、(1)测试按学号查询(如图1-8)(图1-8)(2)测试按姓名查询(如图1-9)(图1-9)另附部分程序代码:1、初试代码char stu[4][10];//学生char bb[3]={'0'};int num[4][4];//学号,成绩int t[4]={0,1,2,3};int i,j,a,m,temp,b,c,d,aa=0,k=0;int sum[4],sums[4],ave[4];//总分,平均分for(i=0;i<4;i++)sum[i]=0,sums[4]=0,ave[4]=0;H1:d=0;printf(" ==============学生成绩信息管理=================\n"); printf(" 1.信息输入\n");printf(" 2.总分统计\n");printf(" 3.平均分统计\n");printf(" 4.总分排序\n");printf(" —>(1)按总分降序排序\n");printf(" —>(2)按总分升序排序\n");printf(" 5.平均分排序\n");printf(" —>(1)按平均分降序排序\n");printf(" —>(2)按平均分升序排序\n");printf(" 6.查询\n");printf(" —>(1)按学号查询\n");printf(" —>(2)按姓名查询\n");printf(" ================================================\n"); printf("请选择操作项:");scanf("%d",&a);2、信息输入if(a==1){for(i=0;i<4;i++){printf("请输入第%d个学生的姓名:",i+1);scanf("%s",stu[i]);printf("学号:");scanf("%d",&num[i][0]);for(m=0;m<i;m++){if(num[i][0]==num[m][0]){printf("学号重复,请重新输入不同的学号!\n");printf("学号:");scanf("%d",&num[i][0]);}}printf("FOX得分:");scanf("%d",&num[i][1]);if(num[i][1]<0 || num[i][1]>100){printf("输入数值不合法,请输入0到100之间的数\n");printf("FOX得分:");scanf("%d",&num[i][1]);}printf("C得分:");scanf("%d",&num[i][2]);if(num[i][2]<0 || num[i][2]>100){printf("输入数值不合法,请输入0到100之间的数\n");printf("C得分:");scanf("%d",&num[i][2]);}printf("ENGLISH得分:");scanf("%d",&num[i][3]);if(num[i][3]<0 || num[i][3]>100){printf("输入数值不合法,请输入0到100之间的数\n");printf("ENGLISH得分:");scanf("%d",&num[i][3]);}printf("\n");}3、总分统计else if(a==2&&k==1)//总分统计{for(i=0;i<4;i++)for(j=1;j<4;j++)sum[i]=sum[i]+num[i][j];printf("学号姓名总分\n");for(i=0;i<4;i++)printf("%d %s %d\n",num[i][0],stu[i],sum[i]);printf("\n");printf("总分统计完成!是否继续(1.继续/2.退出)\n");scanf("%d",&c);if(c==1)goto H1;elseexit(1);}else if(a==3&&k==1)//平均分统计{for(i=0;i<4;i++){for(j=1;j<4;j++)sums[i]=sums[i]+num[i][j];ave[i]=sum[i]/3;}printf("学号姓名平均分\n");for(i=0;i<4;i++)printf("%d %s %d\n",num[i][0],stu[i],ave[i]);printf("\n");printf("平均分统计完成!是否继续(1.继续/2.退出)\n");scanf("%d",&c);if(c==1)goto H1;elseexit(1);}4、总分排序else if(a==4&&k==1)//总分排序{printf("总分排序:\n1.降序\n2.升序\n");scanf("%d",&aa);if(aa==1){printf("按总分降序排序如下:\n");//总分降序for(i=0;i<4;i++)for(j=i;j<4;j++)if(sum[t[i]]<sum[t[j]]){temp=t[i];t[i]=t[j];t[j]=temp;}for(i=0;i<4;i++)printf("%d %s %d\n",num[t[i]][0],stu[t[i]],sum[t[i]]);//输出学号姓名总分printf("\n");printf("总分降序排序完成!是否继续(1.继续/2.退出)\n");scanf("%d",&c);if(c==1)goto H1;elseexit(1);}else if(aa==2){printf("按总分升序排序如下:\n");//总分升序for(i=0;i<4;i++)for(j=i;j<4;j++)if(sum[t[i]]>sum[t[j]]){temp=t[i];t[i]=t[j];t[j]=temp;}for(i=0;i<4;i++)printf("%d %s %d\n",num[t[i]][0],stu[t[i]],sum[t[i]]);//输出学号姓名总分printf("\n");printf("总分升序排序完成!是否继续(1.继续/2.退出)\n");scanf("%d",&c);if(c==1)goto H1;elseexit(1);}}5、平均分排序else if(a==5&&k==1)//平均分排序{printf("平均分排序:\n1.降序\n2.升序\n");scanf("%d",&aa);if(aa==1){printf("按平均分降序排序如下:\n");//平均分降序for(i=0;i<4;i++)for(j=i;j<4;j++)if(ave[t[i]]<ave[t[j]]){temp=t[i];t[i]=t[j];t[j]=temp;}for(i=0;i<4;i++)printf("%d %s %d\n",num[t[i]][0],stu[t[i]],ave[t[i]]);//输出学号姓名总分printf("\n");printf("平均分降序排序完成!是否继续(1.继续/2.退出)\n");scanf("%d",&c);if(c==1)goto H1;elseexit(1);}else if(aa==2){printf("按平均分升序排序如下:\n");//平均分升序for(i=0;i<4;i++)for(j=i;j<4;j++)if(ave[t[i]]>ave[t[j]]){temp=t[i];t[i]=t[j];t[j]=temp;}for(i=0;i<4;i++)printf("%d %s %d\n",num[t[i]][0],stu[t[i]],ave[t[i]]);//输出学号姓名总分printf("\n");printf("平均分升序排序完成!是否继续(1.继续/2.退出)\n");scanf("%d",&c);if(c==1)goto H1;elseexit(1);}}6、查询else if(a==6&&k==1)//查询{printf("查询:\n1.学号\n2.姓名\n");scanf("%d",&aa);if(aa==1){printf("请输入查询学号:");//学号查询scanf("%d",&b);for(i=0;i<4;i++)if(num[i][0]==b){printf("学号:%d 姓名:%s\n",num[i][0],stu[i]);printf("FOX: %d C: %d ENGLISH: %d 总分:%d\n",num[i][1],num[i][2],num[i][3],sum[i]);d=1;printf("\n");printf("查询完成!是否继续(1.继续/2.退出)\n");scanf("%d",&c);if(c==1)goto H1;elseexit(1);}if(d==0){printf("没有该学生!\n");printf("是否继续(1.继续/2.退出)\n");scanf("%d",&c);if(c==1)goto H1;elseexit(1);}}else if(aa==2){printf("请输入查询姓名:");//姓名查询scanf("%s",bb);for(i=0;i<4;i++)if(strcmp(stu[i],bb)==0){printf("学号:%d 姓名:%s\n",num[i][0],stu[i]);printf("FOX: %d C: %d ENGLISH: %d 总分:%d\n",num[i][1],num[i][2],num[i][3],sum[i]);d=1;printf("\n");printf("查询完成!是否继续(1.继续/2.退出)\n");scanf("%d",&c);if(c==1)goto H1;elseexit(1);}if(d==0){printf("没有该学生!\n");printf("是否继续(1.继续/2.退出)\n");scanf("%d",&c);if(c==1)goto H1;elseexit(1); } } }五、心得体会通过本课程设计让我对用C语言编程以及算法的应用有了进一步的认识,对数据统计,排序,查询反面的编程以及信息录入和界面友好性设计方面都有了不同程度的学习,巩固和提高,另外,程序中应用到了各种算法让我更加深了对算法的理解与应用。
C语言-学生成绩管理系统报告及程序代码

C语言课程设计:学生成绩管理系统学生包含以下信息项:学号、姓名、学院、班级、高数成绩、英语成绩、C 语言成绩,总分、平均分。
1. 创建学生成绩信息文件,根据提示输入学生的各项信息,计算出总分和平均语言成绩、总分、平均分。
系统的主要功能包括:然后按学号对学生信息进行排序,并将排序后的学生成绩信息存储到一个二进制文件中。
2.增加学生信息,在原有学生信息文件的基础上增加新的学生成绩信息,要求:增加后的学生信息仍按学号排学序,并继续保存至原文件。
3.删除学生信息,提示用户输入要进行删除操作的学号,如果在文件中有该信息存在,则将该学号所对应的学生信息删除,否则输出提示信息,并提示用户选择是否继续进行删除操作。
4. 修改学生信息,提示用户输入要进行修改操作的学号,如果在文件中有该息存在,则将提示用户输入该学号对应的要修改的选项,结果保存至原文件,并提示用户选择是否继续进行修改操作。
5. 按不同条件对学生信息进行查询操作,输出满足条件的学生信息。
(1) 按学号查询,输入一个学号,输出对应的学生信息。
(2) 按姓名查询,包括精确查询(输入全名),模糊查询(输入姓)。
(3) 按学院查询,输入学院名称,输出该学院的全部学生的信息。
(4) 按班级查询,输入班级名称,输出该班级的全部学生的信息。
6. 按不同条件对学生成绩进行统计工作。
(1)按总分对学生信息进行排序(由高到低),输出排序后的信息,并将排序后的学生信息存放到一个新的二进制文件中。
(2) 按平均分统计各个分数段的学生人数(不及格,60-69,70-79,80-89,90-100)。
(3) 分别找出3门课程成绩最高的学生,并输出他们的信息。
(4) 分别统计出3门课程的不及格率,并输出。
3.详细设计说明主要模块描述:1)调用菜单函数形成操作界面:根据提示序号选择操作程序2)学生成绩写入及排序:输入学生成绩,系统将根据录入信息对信息计算出平均分和总分并对学生信息进行排序,输出排序后的信息存入student.dat文件中3)增加学生信息:输入需增加学生的信息,系统将新增加的学生信息与原信息进行排序后存入原文件中4)删除学生信息:输入需删除学生的学号,将该学号所对应的学生信息删除,否则输出提示信息,并提示用户选择是否继续进行删除操作。
Python学生成绩管理系统(源码+数据库)

Python学生成绩管理系统(源码+数据库)文章目录•前言•一、sqlite是什么?•二、实验步骤•o 1.封装数据库操作类dbHelper.pyo 2.设计学生类students.pyo 3.结果o 4.SQLiteExpertPersSetup64(软件下载)•总结前言学生成绩管理系统可以实现学生基本信息的管理,要求以下功能:(1)输入并存储学生的信息:输入学生的学号、姓名和分数,把数据保存在建立的db文件里面. (2)打印学生信息:通过打印函数把学生所有信息打印在屏幕上. (3)修改学生信息:首先通过查询功能查询出该学生是否存在,如果存在就对该学生的信息进行修改,如果不存在则返回主界面. (4)删除学生信息:该功能是对相应的学生进行删除操作,如果学生存在就查找并进行删除. (5)按学生成绩进行排序:按照学生总分从高到低进行排序. (6)查找学生信息:输入学生学号,查找该学生的相关信息如果查找到就输出该学生的信息,如果没有该学号就提示输入的学号不存在-一、sqlite是什么?SQLite是一种嵌入式数据库,它的数据库就是一个文件。
由于SQLite本身是用C写的,而且体积很小,所以经常被集成到各种应用程序中,甚至在IOS和Android的APP中都可以集成。
二、实验步骤1.封装数据库操作类dbHelper.py代码如下(示例):import sqlite3import tracebackclass dbHelper:def __init__(self,db_url):self.__db_url=db_urldef __con(self):self.con=sqlite3.connect(self.__db_url)#创建能执行的增删改的操作def exec_sql_noparams(self,sql):try:self.__con()cur=self.con.cursor()n=cur.execute(sql)mit()#提交return n.rowcountexcept Exception as e:self.con.rollback()#回滚traceback.print_exc()finally:cur.close()self.con.close()def exec_sql(self,sql,params):try:self.__con()cur = self.con.cursor()n = cur.execute(sql,params)mit()return n.rowcountexcept Exception as e:self.con.rollback()traceback.print_exc()finally:cur.close()self.con.close()def exec_sql_many(self,sql,seq_params): try:self.__con()cur = self.con.cursor()n = cur.executemany(sql, seq_params) mit()return n.rowcountexcept Exception as e:self.con.rollback()traceback.print_exc()finally:cur.close()self.con.close()def query(self,sql):try:self.__con()cur = self.con.cursor()n = cur.execute(sql)return cur.fetchall()except Exception as e:traceback.print_exc()finally:cur.close()self.con.close()def query_params(self,sql,params):try:self.__con()cur = self.con.cursor()n = cur.execute(sql,params)return cur.fetchall()except Exception as e:traceback.print_exc()finally:cur.close()self.con.close()2.设计学生类students.py代码如下(示例):import osimport sqlite3import tracebackfrom dbHelper import dbHelperclass Student:def __init__(self): = ''self.ID = ''self.score1 = 0#语文self.score2 = 0#数学self.score3 = 0#英语self.sum =0#计算总分的方法def sumscore(self):self.sum=self.score1+self.score2+self.score3#输入学生的信息def input(self):=input("请输入学生的姓名:")self.ID=input("请输入学生的学号:")self.score1=int(input("请输入学生语文的分数:")) self.score2=int(input("请输入学生数学的分数:")) self.score3=int(input("请输入学生英语的分数:")) self.sumscore()#判断学号是否存在def searchByID(stulist, ID):for item in stulist:if item.ID == ID:return Trueelse:return False#添加学生def Add(stulist,stu):DB = dbHelper("db/students.db")if searchByID(stulist,stu.ID) == True:print("学号已存在")return Falseprint("是否保存学生信息?")nChoose=input("输入Y/N")if nChoose == 'Y' or nChoose == 'y':stulist.append(stu)sql = "INSERT INTO students (name,ID,score1,score2,score3,sum) VALUES (?,?,?,?,?,?)"DB.exec_sql(sql,(,stu.ID,stu.score1,stu.score2,stu.sc ore3,stu.sum))print("保存成功")#删除学生信息def Del(stulist,ID):DB = dbHelper("db/students.db")flag = False # 判断是否有该学生学号的变量for item in stulist:if item.ID==ID:stulist.remove(item)flag == Truesql = "delete from students where ID = ?"DB.exec_sql(sql, (ID,))print("删除成功")if flag == False:passprint("没有该学号")#修改学生信息(删除旧学生信息,添加一个新学生信息)def Change(stulist,ID):flag = Falsefor item in stulist:if item.ID==ID:stulist.remove(item)flag == Truesql="delete from students where ID=?"DB.exec_sql(sql,(ID,))stu = Student()stu.input()Add(stulist, stu)if flag != False:returnprint("没有该学生学号")#显示所有学生列表def display(stulist):sql = "select * from students "print("姓名学号语文数学英语总分")for item in DB.query(sql):print("{} {} {} {} {} {}".format(item[0], item[1],item[2], item[3],item[4], item[5]))#成绩排序def Sort():sql="select * from students order by sum desc"print(" 姓名学号语文数学英语总分")DB.query(sql)for item in DB.query(sql):print("{} {} {} {} {} {}".format(item[0], item[1], item[2], item[3], item[4], item[5]))#查询学生信息def Search(stulist,ID):print("姓名学号语文数学英语总分")flag = Falsefor item in stulist:if item.ID == ID:flag == Truesql = "select * from students where ID=?"for item in DB.query_params(sql, (ID,)): # DB.quert_params:Mysql有参查询数据语句print("{} {} {} {} {} {}".format(item[0], item[1], item[2], item[3], item[4], item[5]))if flag == False:passprint("没有该学生的学号")#初始化def Init(stulist):print("初始化。
学生成绩管理系统c语言代码(供参考)

C法式学生管理系统之马矢奏春创作以下是用c语言编写的学生成果管理系统的简单代码,可以用vc运行(供参考)#include"stdio.h"#include"stdlib.h"#include"string.h"typedefstruct student//界说学生{char name[10];int number;char sex[2];int math;int eglish;int clanguge;int average;}student;typedefstruct unit//界说接点{student date;struct unit *next;}unit;unit* build()//建立链表并返回指针{unit *p;if((p=(unit*)malloc(sizeof(unit)))==NULL){ printf("=>初始化失败!");return 0;}else{p->next=NULL;p->date.number=0;//头结点寄存学生人数 printf("初始化胜利!\n");return p;}}void add(unit *head)//增加学生{unit *p,*q;int m,n=0;q=head->next;p=(unit*)malloc(sizeof(unit));printf("=>请输入新生姓名!\n");gets(p->);fflush(stdin);printf("=>请输入学号!\n");while(n==0){scanf("%d",&m);fflush(stdin);if(q==NULL) n=1;while(q){if(q->date.number==m){printf("=>你输入的学号与已有同学的学号相同,请重新输入!\n");q=head->next;break;}else{q=q->next;if(q==NULL) n=1;}}}p->date.number=m;printf("=>请输入性别!\n");gets(p->date.sex);fflush(stdin);printf("=>请输入数学成果\n");scanf("%d",&m);fflush(stdin);p->date.math=m;printf("=>请输入英语成果\n");scanf("%d",&m);fflush(stdin);p->date.eglish=m;printf("=>请输入c语言成果\n");scanf("%d",&m);fflush(stdin);p->date.clanguge=m;p->date.average=(p->date.math+p->date.eglish+p->date.clanguge);q=head->next;head->next=p;p->next=q;head->date.number++;}void deletion(unit *head)//删除一名学生{unit *p=head->next,*q=head;char N[10];printf("=>请输入你想删除的学生姓名!\n");gets(N);fflush(stdin);if(p==NULL)printf("=>系统无学生可删除!\n");while(p){if(strcmp(p->,N)==0){q->next=p->next;head->date.number--;printf("=>删除%s胜利!\n",p->);free(p);break;}else{p=p->next;q=q->next;if(p==NULL)printf("=>你要删除的学生不存在,删除失败!\n");}}}int display(unit *head)//显示学生信息{unit *p=head->next;int m,n=0;char N[10];if(p==NULL){printf("=>系统无学生!\n");return 0;}while(n==0){printf("******************************************** **********************************\n");printf("=>请选择你的把持!\n");printf("=>\t\t\t1.显示所有\t2.按姓名查找\n\t\t\t3.按学号查找\t4.返回主菜单\n");scanf("%d",&m);fflush(stdin);switch(m){case 1:printf("\n=>该系统拥有%d名学生!\n\n",head->date.number);p=head->next;printf("\t姓名\t学号\t性别\t数学\t 英语\tc语言\t综合\n\n");while(p){printf("\t%s\t%d\t%s\t%d\t%d\t%d\t%d\n",p->,p->date.number,p->date.sex,p->date.math,p->date.eglish,p->date.clanguge,p->date.average);p=p->next;}break;case 2:printf("=>请输入查找姓名!\n");gets(N);fflush(stdin);p=head->next;while(p){if(strcmp(p->,N)==0){printf("\t姓名\t学号\t性别\t数学\t英语\tc语言\t综合\n");printf("\t%s\t%d\t%s\t%d\t%d\t%d\t%d\n",p->,p->date.number,p->date.sex,p->date.math,p->date.eglish,p->date.clanguge,p->date.average);break;}else{p=p->next;if(p==NULL)printf("=>你要查的学生不存在!"); }}break;case 3: printf("=>请输入查找学号!\n");scanf("%d",&m);fflush(stdin);p=head->next;while(p){if(p->date.number==m){printf("\t姓名\t学号\t性别\t数学\t英语\tc语言\t综合\n");printf("\t%s\t%d\t%s\t%d\t%d\t%d\t%d\n",p->,p->date.number,p->date.sex,p->date.math,p->date.eglish,p->date.clanguge,p->date.average);break;}else{p=p->next;if(p==NULL)printf("=>你要查的学生不存在!\n");}}break;case 4:n=1;break;}}return 1;}int range(unit *head)//排序{unit *p=head,*q=head->next;int n,i,m=head->date.number;printf("******************************************** ***********************************\n");printf("\t\t\t1.按学号\t2.按成果\n\n");printf("=>请选择把持!\n》");scanf("%d",&n);fflush(stdin);if(q==NULL){ printf("=>无学生可排序!\n");return 0;}switch(n){case 2:for(i=0;i<m;i++)//按总分排序{p=head;q=head->next;while(q->next){if((q->date.average)<(q->next->date.average)){p->next=q->next;p=p->next;q->next=p->next;p->next=q;}else{p=p->next;q=q->next; }}}break;case 1:for(i=0;i<=m;i++)//按学号排序{p=head;q=head->next;while(q->next){if((q->date.number)>(q->next->date.number)){p->next=q->next;p=p->next;q->next=p->next;p->next=q;}else{p=p->next;q=q->next; }}}break;}printf("=>排序胜利!\n");return 1;}void menu(){printf("\n********************************* 主菜单***************************************\n");printf("\t\t\t1.新建系统\t2.添加学生\n\t\t\t3.删除学生\t4.检查信息\n\t\t\t5.排列顺序\t6.读取信息\n\t\t\t7.保管信息\t8.退出系统\n");printf("=>请选择你的把持!\n");}int save(unit *head)//保管{FILE *fp;unit *p;p=head;if((fp=fopen("d:\\学生","wb+"))==NULL){printf("=>保管失败!");return 0;}while(p){fwrite(&(p->date),sizeof(student),1,fp);p=p->next;}printf("=>保管胜利!");fclose(fp);return 1;}unit* read()//读入系统学生信息{int i;unit *p,*q,*head;FILE *fp;if((head=(unit*)malloc(sizeof(unit)))==NULL){ printf("=>开辟空间失败!");exit(1);}else{head->next=NULL;head->date.number=0;//头结点寄存学生人数}q=head;if((fp=fopen("d:\\学生","rb"))==NULL){printf("=>系统无学生!\n");return 0;}fread(&(q->date),sizeof(student),1,fp);for(i=0;i<head->date.number;i++){if((p=(unit*)malloc(sizeof(unit)))==NULL){ printf("=>读值失败!");exit(1);}fread(&(p->date),sizeof(student),1,fp);p->next=q->next;q->next=p;}fclose(fp);return head;}void main(){int m=0,n, i;unit *head;printf("********************************************************************************\n\n");printf("\t\t\t* 欢迎使用学生成果管理系统 * \n");printf("\n\t\t\t\t\t\t\t\t编译员:吹吹风\n\n"); printf("=>正在读取系统信息......\n");if((head=read())==0){printf("=>是否新建?\n");printf("\t\t\t是(1)\t\t否(2)\n");scanf("%d",&i);fflush(stdin);if(i==1)head=build();elseif(i==2)exit(1);}elseprintf("=>信息导入胜利!");while(m==0){menu();scanf("%d",&n);fflush(stdin);switch(n){case 1: head=build();break;case 2:add(head);break;case 3:deletion(head);break;case 4:display(head);break;case 5: range(head);break;case 6:head=read();if(head!=0) printf("=>读取存盘胜利!\n");break;case 7:save(head);break;case 8:m=1;break;}}}。
学生成绩管理系统(数据结构C语言版源代码)

学生成绩管理系统(数据结构C语言版源代码)勇者,必以决斗之勇气与五张试卷一决雌雄;懦夫,概以鼠目之寸光量人生此战必输无疑!#include<tdio.h>#include<tring.h>#include<tdlib.h>tructtudent{charNum[10];/某字符型学生学号某/charName[20];/某字符型学生姓名某/charSe某[3];/某字符型学生性别某/doubleEnglih;/某双精度实型英语成绩某/doubleJava;/某双精度实型Java成绩某/doubleSjjg;/某双精度实数据结构某/doubleSzdl;/某双精度实型数字电路某/doubleJj;/某计算机组成原理某/tructtudent某ne某t;/某用与构建连表指向下一结点某/};FILE某fp;/某定义全局变量fp某/voidReviemenu();/某修改菜单某/voidSortmenu();/某排序菜单某/voidmenu();/某主菜单某/voidecret();/某安全验证某/tructtudent某Input();/某新建学生信息某/voidfprint(tructtudent某head);/某将信息导入文件可追加某/voidfprint_(tructtudent某head);/某将信息导入文件并覆盖某/ voidBrowe(tructtudent某head);/某浏览全部学生信息某/tructtudent某create(tructtudent某headint某n);/某从tuhu_lit中读取数据构建链表某/voidFindofNum(tructtudent某head);/某按学号查询学生信息某/ voidFindofNname(tructtudent某head);/某按姓名查询学生信息某/ voidSortEnglih(tructtudent某head);/某按英语成绩排序某/voidSortJava(tructtudent某head);/某按Java成绩排序某/voidSortSjjg(tructtudent某head);/某按数据结构成绩排序某/voidSortSzdl(tructtudent某head);/某按数字逻辑电路成绩排序某/voidSortJj(tructtudent某head);/某按计算机组成原理成绩排序某/tructtudent某Delete(tructtudent某headcharm[15]);/某按学号删除学生成绩信息某//某主菜单某/voidmenu(){printf("\n\n");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");}/某排序菜单某/voidSortmenu(){printf("\n\n");printf("某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某\n");printf("按成绩排序\n");printf("1-大学英语2-JAVA编程\n");printf("3-数据结构4-数字逻辑电路\n");printf("5-计算机组成原理0-返回上级菜单\n");printf("某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某\n");}/某修改菜单某/voidReviemenu(){printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ n");printf("1--修改学生姓名2--修改学生学号\n");printf("3--修改学生性别4--修改英语成绩\n");printf("5--修改JAVA成绩6--修改数据结构\n");printf("7--修改数字电路8--修改计算计\n");printf("0--返回上级菜单\n");printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ n");}/某安全验证某/voidecret(){chara[20];printf("某某欢迎来到学生信息管理系统进入系统前请先进行密码验证---");printf("");do{get(a);/某输入密码某/ytem("cl");/某调用库函数清屏某/printf("对不起!您输入的密码有误请重新输入---");}while(trcmp(a"0605")!=0);/某单一密码"0605"某/ytem("cl");}/某新建学生信息某/tructtudent某Input(){tructtudent某p1某p2某head;/某建立辅助结点及头结点某/charName;intn=0某;printf("\n请按对应项输入学生信息以#结束:\n");printf("姓名学号性别英语Java数据结构数字电路\n");p1=(tructtudent某)malloc(izeof(tructtudent));head=p2=p1;do{/某使用dowhile语句输入学生信息某/canf("%"&p1->Name);if(trcmp(p1->Name"#")==0)break;/某判断结束符某/elecanf("%%%lf%lf%lf%lf%lf"p1->Nump1->Se某&p1->Englih&p1->Java&p1->Sjjg&p1->Szdl&p1->Jj);Name='#';p1=(tructtudent某)malloc(izeof(tructtudent)); p2->ne某t=p1;p2=p1;n++;}while(1);p1->ne某t=NULL;printf("学生信息输入结束!\n");计算机组成原理getchar();printf("是否保存学生信息?(1.是/2.否):"); canf("%d"&某);if(某==1)fprint(head);/某调用函数保存至文件某/eleprintf("\n文件没有被保存!\n"); returnhead;/某返回头指针某/}/某将信息导入文件可追加某/voidfprint(tructtudent某head){tructtudent某p1;if((fp=fopen("tudent_lit.t某t""a"))==NULL){printf("Fileopenerror!\n");e某it(0);}for(p1=head;p1->ne某t!=NULL;p1=p1->ne某t)/某遍历某/fprintf(fp"%\t%\t%\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p1->Namep1->Nump1->Se某p1->Englihp1->Javap1->Sjjgp1->Szdlp1->Jj);/某将学生信息写入文件某/fcloe(fp);/某关闭文件某/printf("\n学生信息已成功保存到文件tudent_lit.t某t中!\n"); getchar();}/某将信息导入文件并覆盖某/voidfprint_(tructtudent某head){tructtudent某p1;if((fp=fopen("tudent_lit.t某t""w"))==NULL)printf("Fileopenerror!\n");e某it(0);}for(p1=head;p1!=NULL;p1=p1->ne某t)/某遍历某/ fprintf(fp"%\t%\t%\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" p1->Namep1->Nump1->Se某p1->Englihp1->Javap1->Sjjgp1->Szdlp1->Jj);/某将学生信息写入文件某/fcloe(fp);/某关闭文件某/;getchar();}/某浏览全部学生信息某/voidBrowe(tructtudent某head){charNum[10];/某字符型学生学号某/ charName[20];/某字符型学生姓名某/ charSe某[3];/某字符型学生性别某/ doubleEnglih;/某双精度实型英语成绩某/ doubleJava;/某双精度实型Java成绩某/ doubleSjjg;/某双精度实数据结构某/ doubleSzdl;/某双精度实型数字电路某/ doubleJj;/某计算机组成原理某/if((fp=fopen("tudent_lit.t某t""a+"))==NULL){printf("Fileopenerror!\n");e某it(0);}printf("-------------------------------------------------------------\n");printf("姓名学号性别英语Java数据结构数字电路计算机\n");while(!feof(fp))/某读取并输出某/{fcanf(fp"%%%%lf%lf%lf%lf%lf"NameNum&Englih&Java&Sjjg&Szdl&Jj);printf("%\t%\t%\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"NameNumSe某EnglihJavaSjjgSzdlJj);};if(fcloe(fp)){printf("Cannotcloethefile!\n");e某it(0);}}/某从tuhu_lit中读取数据构建链表某/tructtudent某create(tructtudent某head int某n){FILE某fp;tructtudent某p某p1某p2;if((fp=fopen("tudent_lit.t某t""a+"))==NULL)printf("Fileopenerror!\n");e某it(0);}while(!feof(fp)){(某n)++;p=(tructtudent某)malloc(izeof(tructtudent)); fcanf(fp"%%%%lf%lf%lf%lf%lf"p->Namep->Nump->Se某&p->Englih&p->Java&p->Sjjg&p->Szdl&p->Jj);if(head==NULL)head=p;p1=p;}ele{p1->ne某t=p;p2=p1;p1=p;}}p2->ne某t=NULL;free(p);(某n)--;fcloe(fp);returnhead;}/某按姓名查询学生信息某/ voidFindofName(tructtudent某head)inti=0n=0;charb[20];tructtudent某p;head=create(head&n);p=head;printf("\n请输入要查询的学生姓名:");canf("%"b);while(p!=NULL){if(trcmp(p->Nameb)==0){printf("姓名学号性别英语Java数据结构数字电路计算机\n"); printf("%\t%\t%\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Se某p->Englihp->Javap->Sjjgp->Szdlp->Jj);i++;}p=p->ne某t;}if(i==0)printf("\n对不起!没有找到名为"%"的学生信息!\n"b);}/某按学号查询学生信息某/voidFindofNum(tructtudent某head){inti=0n;charb[20];tructtudent某p;head=create(head&n);p=head;printf("\n请输入要查询的学生学号:");canf("%"b);while(p!=NULL){if(trcmp(p->Numb)==0){printf("姓名学号性别英语Java数据结构数字电路计算机\n"); printf("%\t%\t%\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Se某p->Englihp->Javap->Sjjgp->Szdlp->Jj);i++;}p=p->ne某t;}if(i==0)printf("\n对不起!没有找到学号为"%"学生信息!\n"b);}/某按英语成绩排序某/voidSortEnglih(tructtudent某head){tructtudent某p某tail;/某定义中间变量某/intn;doubleEnglih;p=(tructtudent某)malloc(izeof(tructtudent)); head=create(head&n);printf("姓名学号性别英语Java数据结构数字电路计算机\n");while(head->ne某t!=NULL)/某利用选择法排序某/ {tail=NULL;p=head;Englih=p->Englih;/某将链表中第一个成绩赋给Englih某/ while(p!=NULL){if((p->Englih)>Englih)/某比较某/Englih=p->Englih;tail=p;p=p->ne某t;}tail=NULL;p=head;while(p->ne某t!=NULL){if(p->Englih==Englih){printf("%\t%\t%\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Nump->Se某p->Englihp->Javap->Sjjgp->Szdlp->Jj);if(p==head)head=head->ne某t;eletail->ne某t=p->ne某t;}tail=p;p=p->ne某t;}if(p->Englih==Englih){/某分数相同时无需比较某/printf("%\t%\t%\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Se某p->Englihp->Javap->Sjjgp->Szdlp->Jj);tail->ne某t=NULL;}}p=head;/某将链表赋给结构体指针某/printf("%\t%\t%\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" p->Namep->Nump->Se某p->Englihp->Javap->Sjjgp->Szdlp->Jj);/某浏览排序后的信息某/printf("按英语成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/某按JAVA成绩排序某/voidSortJava(tructtudent某head){tructtudent某p某tail;/某定义中间变量某/intn;doubleJava;p=(tructtudent某)malloc(izeof(tructtudent));head=create(head&n);printf("姓名学号性别英语Java数据结构数字电路计算机\n");while(head->ne某t!=NULL)/某利用选择法排序某/{tail=NULL;Java=p->Java;/某将链表中第一个成绩赋给Java某/while(p!=NULL){if((p->Java)>Java)/某比较某/Java=p->Java;tail=p;p=p->ne某t;}tail=NULL;p=head;while(p->ne某t!=NULL){if(p->Java==Java){printf("%\t%\t%\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" p->Namep->Nump->Se某p->Englihp->Sjjgp->Szdlp->Jj);if(p==head)head=head->ne某t;eletail->ne某t=p->ne某t;}tail=p;p=p->ne某t;}if(p->Java==Java){/某成绩相同时无需比较某/printf("%\t%\t%\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" p->Namep->Nump->Se某p->Englihp->Javap->Szdlp->Jj);tail->ne某t=NULL;}}p=head;/某将链表赋给结构体指针某/printf("%\t%\t%\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Se某p->Englihp->Javap->Sjjgp->Szdlp->Jj);/某浏览排序后的信息某/printf("按Java成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/某按数据结构排序某/voidSortSjjg(tructtudent某head){tructtudent某p某tail;/某定义中间变量某/intn;doubleSjjg;p=(tructtudent某)malloc(izeof(tructtudent));head=create(head&n);printf("姓名学号性别英语Java数据结构数字电路计算机\n");while(head->ne某t!=NULL)/某利用选择法排序某/ {tail=NULL;p=head;Sjjg=p->Sjjg;/某将链表中第一个成绩赋给Sjjg某/while(p!=NULL){if((p->Sjjg)>Sjjg)/某比较某/Sjjg=p->Sjjg;tail=p;p=p->ne某t;}tail=NULL;p=head;while(p->ne某t!=NULL){if(p->Sjjg==Sjjg){printf("%\t%\t%\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" p->Namep->Nump->Se某p->Englihp->Javap->Sjjgp->Szdlp->Jj);if(p==head)head=head->ne某t;eletail->ne某t=p->ne某t;}tail=p;p=p->ne某t;}if(p->Sjjg==Sjjg){/某成绩相同时无需比较某/printf("%\t%\t%\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" p->Namep->Nump->Se某p->Englihp->Javap->Sjjgp->Szdlp->Jj);tail->ne某t=NULL;}}p=head;/某将链表赋给结构体指针某/printf("%\t%\t%\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Se某p->Englihp->Javap->Sjjgp->Szdlp->Jj);/某浏览排序后的信息某/printf("按数据结构成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/某按数字电路排序某/voidSortSzdl(tructtudent某head){tructtudent某p某tail;/某定义中间变量某/doubleSzdl;p=(tructtudent某)malloc(izeof(tructtudent));head=create(head&n);printf("姓名学号性别英语Java数据结构数字电路计算机\n");while(head->ne某t!=NULL)/某利用选择法排序某/ {tail=NULL;p=head;Szdl=p->Szdl;/某将链表中第一个成绩赋给Szdl某/while(p!=NULL){if((p->Szdl)>Szdl)/某比较某/Szdl=p->Szdl;tail=p;p=p->ne某t;}tail=NULL;while(p->ne某t!=NULL){if(p->Szdl==Szdl){printf("%\t%\t%\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" p->Namep->Nump->Se某p->Englihp->Javap->Sjjgp->Szdlp->Jj);if(p==head)head=head->ne某t;eletail->ne某t=p->ne某t;}tail=p;p=p->ne某t;}if(p->Szdl==Szdl){/某成绩相同时无需比较某/printf("%\t%\t%\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" p->Namep->Nump->Se某p->Englihp->Javap->Sjjgp->Szdlp->Jj);tail->ne某t=NULL;}}p=head;/某将链表赋给结构体指针某/printf("%\t%\t%\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" p->Namep->Nump->Se某p->Englihp->Javap->Sjjgp->Szdlp->Jj);/某浏览排序后的信息某/printf("按数字电路成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/某按计算机组成原理排序某/voidSortJj(tructtudent某head){tructtudent某p某tail;/某定义中间变量某/intn;doubleJj;p=(tructtudent某)malloc(izeof(tructtudent));head=create(head&n);printf("姓名学号性别英语Java数据结构数字电路计算机\n");while(head->ne某t!=NULL)/某利用选择法排序某/ {tail=NULL;p=head;Jj=p->Jj;/某将链表中第一个成绩赋给Jj某/while(p!=NULL){if((p->Jj)>Jj)/某比较某/Jj=p->Jj;tail=p;p=p->ne某t;}tail=NULL;p=head;while(p->ne某t!=NULL){if(p->Jj==Jj){printf("%\t%\t%\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Nump->Se某p->Englihp->Javap->Sjjgp->Szdlp->Jj);if(p==head)head=head->ne某t;eletail->ne某t=p->ne某t;}tail=p;p=p->ne某t;}if(p->Jj==Jj){/某成绩相同时无需比较某/printf("%\t%\t%\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" p->Namep->Se某p->Englihp->Javap->Sjjgp->Szdlp->Jj);tail->ne某t=NULL;}}p=head;/某将链表赋给结构体指针某/printf("%\t%\t%\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n" p->Namep->Nump->Se某p->Englihp->Javap->Sjjgp->Szdlp->Jj);/某浏览排序后的信息某/printf("按计算机组成原理成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/某按学号删除学生成绩信息某/tructtudent某Delete(tructtudent某headcharm[15]){tructtudent某ptr1某ptr2;intn;printf("\n所有学生信息如下:\n");Browe(head);printf("\n请输入想要删除的学生学号:");canf("%"m);head=create(head&n);if(head==NULL){printf("无学生信息!\n"); returnhead;}if((trcmp(head->Numm)==0)&&head!=NULL){ptr2=head;head=head->ne某t;free(ptr2);}if(trcmp(head->Numm)!=0){ptr1=head;ptr2=head->ne某t;while(ptr2!=NULL){if(trcmp(ptr2->Numm)==0){ptr1->ne某t=ptr2->ne某t; free(ptr2);}eleptr1=ptr2;ptr2=ptr1->ne某t;}}fprint_(head);printf("\n学号为'%'学生信息已被删除并保存至文件!\n"m);returnhead;}tructtudent某Revie(){intn=0t;charnum[10];charNum[10];/某字符型学生学号某/ charName[20];/某字符型学生姓名某/charSe某[3];/某字符型学生性别某/ doubleEnglih;/某双精度实型英语成绩某/ doubleJava;/某双精度实型Java成绩某/ doubleSjjg;/某双精度实数据结构某/ doubleSzdl;/某双精度实型数字电路某/ doubleJj;/某计算机组成原理某/ tructtudent某head=NULL;tructtudent某p;printf("\n所有学生信息如下:\n"); Browe(head);head=create(head&n);printf("\n输入需要修改的学生的学号:"); canf("%"num);p=head;while(head!=NULL){if(trcmp(p->Numnum)==0){ytem("cl");Reviemenu();num);printf("姓名学号性别英语Java数据结构数字电路计算机\n"); printf("%\t%\t%\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Se某p->Englihp->Javap->Sjjgp->Szdlp->Jj);while(1){printf("请选择需要修改的信息:");。
学生成绩管理系统代码

#include<stdio.h>#include<string.h>#include<windows.h>#include<conio.h>#define MAX 50void menu(); //主界面void input(); //录入插入void del(); //删除记录void add(); //添加记录void sort(); //排序void display(); //显示全部成绩void save(); //向文件输入学生信息void read(); //保存学生信息void total(); //统计void waiting(); //等待界面void quit(); //退出界面struct student{int num;char name[15];int chin;int math;int engl;int c;float aver;};int count=0; //当前学生个数struct student stu[50];void input(){int i,k;char c;system ("cls");do{printf("学号:\n");scanf("%d",&stu[count].num);k=1;if(stu[count].num<0)printf("输入错误:\n");for(i=0;i<count;i++){if(stu[count].num==stu[i].num){k=0;printf("学号重复,重新输入:\n");}}}while(!k);printf("请输入姓名:\n");scanf("%s",stu[count].name);printf("请输入语文----数学----英语----c成绩\n");scanf("%d%d%d%d",&stu[count].chin,&stu[count].math,&stu[count].engl,&stu[count].c);stu[count].aver=(stu[count].chin+stu[count].math+stu[count].engl+stu[count].c)/4.0;printf("是否继续输入(y/n):\n");do{c=getchar();if(c=='y'||c=='Y'){count++;if(count<50)input();else{printf("记录数已满\n");Sleep(2000);system("cls");menu();}}else if(c=='n'||c=='N'){count++;system("cls");menu();}else;}while((c!='y')&&(c!='n')&&(c!='Y')&&(c!='N'));}void del(){int i,j,del_num,k=0;char c;system("cls");printf("请输入要删除的学生学号:\n");scanf("%d",&del_num);for(i=0;i<count;i++){if(stu[i].num==del_num){k=1;for(j=i;j<count;j++)stu[j]=stu[j+1];}}if(!k)printf("没有要找的学号.\n");printf("该学生的信息为:\n");printf("学号:%d 姓名:%s 语文:%d 数学:%d 英语:%d c: %d 平均值:%f\n",&stu[del_num].num,stu[del_num].name,&stu[del_num].chin,&stu[del_num].math,&s tu[del_num].engl,&stu[del_num].c,&stu[del_num].aver);printf("是否继续删除?(y/n)");getchar();do{c=getchar();if(c=='y'||c=='Y'){count--;del();}else if(c=='n'||c=='N'){count--;system("cls");menu();}}while((c!='y')&&(c!='n'));}void change(){int i,j,k=0,change_num;char ch1,ch2;system("cls");printf("请输入要修改的学生的学号:\n");scanf("%d",&change_num);for(i=0;i<count;i++){if(stu[i].num=change_num){do{printf("该学生的信息为:\n");printf("学号:%d 姓名:%s 语文:%d 数学:%d 英语:%d c: %d 平均值:%f\n\n",&stu[change_num].num,stu[change_num].name,&stu[change_num].chin,&stu[cha nge_num].math,&stu[change_num].engl,&stu[change_num].c,&stu[change_num].aver);printf(" 需要修改的科目:\n");printf(" 1.语文 2.数学 3.英语 4.c\n");getchar();scanf("%d",&j);if(j==1){printf("新语文成绩为:\n");scanf("%d",&stu[i].chin);}if(j==2){printf("新数学成绩为:\n");scanf("%d",&stu[i].math);}if(j==3){printf("新英语的成绩为:\n");scanf("%d",&stu[i].engl);}if(j==4){printf("新c成绩为:\n");scanf("%d",&stu[i].c);}stu[i].aver=(stu[i].chin+stu[i].math+stu[i].engl+stu[i].c)/4.0;printf("是否继续修改其他科目成绩(y/n):\n");scanf("%c",&ch1);}while(ch1=='y'||ch1=='Y');printf("该学生的信息为:\n");printf("学号:%d 姓名:%s 语文:%d 数学:%d 英语:%d c: %d 平均值:%f\n\n",&stu[change_num].num,stu[change_num].name,&stu[change_num].chin,&stu[cha nge_num].math,&stu[change_num].engl,&stu[change_num].c,&stu[change_num].aver);do{ch2=getchar();if(ch2=='y'||ch2=='Y')change();else if(ch2=='n'||ch2=='N'){system("cls");menu();}}while((ch2!='y')&&(ch2!='n'));}}}void add(){int i,k;char c;system ("cls");do{printf("新学号:\n");scanf("%d",&stu[count].num);k=1;if(stu[count].num<0)printf("输入错误:\n");for(i=0;i<count;i++){if(stu[count].num==stu[i].num){k=0;printf("学号重复,重新输入:\n");}}}while(!k);printf("请输入姓名:\n");scanf("%s",stu[count].name);printf("请输入新语文----数学----英语----c成绩\n");scanf("%d%d%d%d",&stu[count].chin,&stu[count].math,&stu[count].engl,&stu[count].c);stu[count].aver=(stu[count].chin+stu[count].math+stu[count].engl+stu[count].c)/4.0;printf("是否继续输入(y/n):\n");do{c=getchar();if(c=='y'||c=='Y'){count++;if(count<50)input();else{printf("记录数已满\n");Sleep(2000);system("cls");menu();}}else if(c=='n'||c=='N'){count++;system("cls");menu();}else;}while((c!='y')&&(c!='n')&&(c!='Y')&&(c!='N')); }void sort(){int i,j,k;char ch;struct student temp;system("cls");printf("*********请选择排序方式********\n");printf(" 1.按学号排序\n");printf(" 2.按语文成绩排序\n");printf(" 3.按数学成绩排序\n");printf(" 4.按英语成绩排序\n");printf(" 5.按c成绩排序\n");printf(" 6.按平均成绩排序\n");printf("请选择(0-6):\n");scanf("%d",&k);switch(k){case 1:for(i=0;i<count-1;i++){for(j=0;j<count-i-1;j++){if(stu[j].num>stu[j+1].num){temp=stu[j];stu[j]=stu[j+1];stu[j+1]=temp;}}}break;case 2:for(i=0;i<count-1;i++){for(j=0;j<count-i-1;j++){if(stu[j].chin<stu[j+1].chin){temp=stu[j];stu[j]=stu[j+1];stu[j+1]=temp;}}}break;case 3:for(i=0;i<count-1;i++){for(j=0;j<count-i-1;j++){if(stu[j].math<stu[j+1].math){temp=stu[j];stu[j]=stu[j+1];stu[j+1]=temp;}}}break;case 4:for(i=0;i<count-1;i++){for(j=0;j<count-i-1;j++){if(stu[j].engl<stu[j+1].engl){temp=stu[j];stu[j]=stu[j+1];stu[j+1]=temp;}}}break;case 5:for(i=0;i<count-1;i++){for(j=0;j<count-i-1;j++){if(stu[j].c<stu[j+1].c){temp=stu[j];stu[j]=stu[j+1];stu[j+1]=temp;}}}break;case 6:for(i=0;i<count-1;i++){for(j=0;j<count-i-1;j++){if(stu[j].aver<stu[j+1].aver){temp=stu[j];stu[j]=stu[j+1];stu[j+1]=temp;}}}break;}printf(" 排序的结果:\n");printf(" 学号姓名语文成绩数学成绩英语成绩c成绩平均成绩\n");for(i=0;i<count;i++){printf(" %d %s %d %d %d %d %f\n",stu[i].num,stu[i].name,stu[i].chin,stu[i]. math,stu[i].engl,stu[i].c,stu[i].aver);}printf("是否回主菜单(y/n):");getchar();scanf("%c",&ch);if(ch=='y'||ch=='Y'){system("cls");menu();}}void display(){int i;char ch;system("cls");printf(" 学号姓名语文成绩数学成绩英语成绩c成绩平均成绩\n");for(i=0;i<count;i++){printf(" %d %s %d %d %d %d %f\n",stu[i].num,stu[i].name,stu[i].chin,stu[i]. math,stu[i].engl,stu[i].c,stu[i].aver);}printf("\n\n是否回主菜单(y/n)\n");scanf("%c",&ch);if(ch=='y'||ch=='Y');{getchar();system("cls");menu();}}void save(){FILE *fp;int i;if((fp=fopen("学生成绩.txt","wb"))==NULL){printf("cannot open the file\n");return;}for(i=0;i<count;i++){fprintf(fp,"学号:%d\t姓名:%s\t语文:%d\t数学:%d\t英语:%d\tc:%d\t平均值:%f\n",stu[i].num,stu[i].name,stu[i].chin,stu[i].math,stu[i].engl,stu[i].c,stu[i].aver);}fclose(fp);}void read(){FILE *fp;int i=0;if((fp=fopen("学生成绩.txt","rb"))==NULL){ printf("\n\n欢迎使用成绩管理系统!\n");printf("\n\n目前尚没有任何信息");return;}for(i=0;i<count;i++){fscanf(fp,"%d%s%d%d%d%d%f",&stu[i].num,stu[i].name,&stu[i].chin,&stu[i].math,&stu[i].e ngl,&stu[i].c,&stu[i].aver);printf("学号:%d\t姓名:%s\t语文:%d\t数学:%d\t英语:%d\tc:%d\t平均值:%f\n",stu[i].num,stu[i].name,stu[i].chin,stu[i].math,stu[i].engl,stu[i].c,stu[i].aver);}fclose(fp);}void save_read(){int i;char ch;system("cls");printf("**************************\n");printf(" 1)保存学生信息\n");printf(" 2)读取学生信息\n");printf("请选择:\n");getchar();scanf("%d",&i);if(i==1) save();else read();printf("是否回主菜单(y/n):");getchar();scanf("%c",&ch);if(ch=='y'||ch=='Y'){system("cls");menu();}}void total(){int i,j=0;int t1=0,t2=0,t3=0,t4=0;char ch;system("cls");for(i=0;i<count;i++){if(stu[i].aver>=85) t1++;else if(stu[i].aver>=70) t2++;else if(stu[i].aver>=60) t3++;else t4++;}printf("统计结果:\n");printf("优秀学生%d人\n",t1);printf("良好学生%d人\n",t2);printf("及格学生%d人\n",t3);printf("不及格学生%d人\n\n",t4);printf("是否回主菜单(y/n):");getchar();scanf("%c",&ch);if(ch=='y'||ch=='Y'){system("cls");menu();}}void search_num(){int i,j=0,num1;printf("查询的学生的学号为:");scanf("%d",&num1);for(i=0;i<count;i++){if(stu[i].num==num1){printf("该学生的信息为:\n");printf("学号:%d\t姓名:%s\t语文:%d\t数学:%d\t英语:%d\tc:%d\t平均值:%f\n",stu[i].num,stu[i].name,stu[i].chin,stu[i].math,stu[i].engl,stu[i].c,stu[i].aver);}else j++;}if(j==count)printf("无该生信息\n");}void search_name(){int i,j=0;char name1[20];printf("查询的学生的姓名为:");scanf("%s",name1);for(i=0;i<count;i++){if(strcmp(stu[i].name,name1)==0){printf("该学生的信息为:\n");printf("学号:%d\t姓名:%s\t语文:%d\t数学:%d\t英语:%d\tc:%d\t平均值:%f\n",stu[i].num,stu[i].name,stu[i].chin,stu[i].math,stu[i].engl,stu[i].c,stu[i].aver);}else j++;}if(j==count)printf("无该生信息\n");}void search(){int k;char ch;system("cls");printf(" 按学号查询还是姓名查询\n");printf(" 1.学号\n");printf(" 2.姓名\n");printf("请选择(1-2):");scanf("%d",&k);if(k==1) search_num();else if(k==2) search_name();printf("是否回主菜单(y/n):");getchar();scanf("%c",&ch);if(ch=='y'||ch=='Y'){system("cls");menu();}}void waiting(){int i;printf("\n\t请稍侯...........");for(i=0;i<25;i++){switch(i%4){case 1:printf("\b\\");break;case 2:printf("\b-");break;case 3:printf("\b/");break;case 0:printf("\b|");break;}Sleep(100);}system("cls");}void quit(){system("cls");printf("\n\n");printf("\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");printf("\t┃************************************************************┃\n");printf("\t┃* *┃\n");printf("\t┃* 谢谢使用本程序*┃\n");printf("\t┃************************************************************┃\n");printf("\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━}void menu(){int k,m;printf("*************************欢迎进入学生成绩管理系统*************************\n\n");printf("\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");printf("\t┃************************************************************┃\n");printf("\t┃* * *┃\n");printf("\t┃* 1.录入成绩* 2.显示成绩*┃\n");printf("\t┃* * *┃\n");printf("\t┃************************************************************┃\n");printf("\t┃* * *┃\n");printf("\t┃* 3.更新记录* 4.成绩排序*┃\n");printf("\t┃* * *┃\n");printf("\t┃************************************************************┃\n");printf("\t┃* * *┃\n");printf("\t┃* 5.保存-读取* 6.统计*┃\n");printf("\t┃* * *┃\n");printf("\t┃************************************************************┃\n");printf("\t┃* * *┃\n");printf("\t┃* 7.成绩查询* 0.退出*┃\n");printf("\t┃* * *┃\n");printf("\t┃************************************************************printf("\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");while ((k!=0)&&(k!=1)&&(k!=2)&&(k!=3)&&(k!=4)&&(k!=5)){printf("\n请选择(0-7):");scanf("%d",&k);switch(k){case 1:if(count<50)input();else{printf("记录数已满\n");Sleep(2000);system("cls");menu();}break;case 2:display();break;case 3:printf(" 1.添加信息\n");printf(" 2.修改信息\n");printf(" 3.删除信息\n");getchar();scanf("%d",&m);if(m==1) add();else if(m==2) change();else if(m==3) del();break;case 4:sort();break;case 5:save_read();break;case 6:total();break;case 7:search();break;case 0:quit();break;default:printf("\n选项错误\n");}}}void main(){int i,k=0;char username[20],pwd[6];system("color 3f");printf("\n\n");printf(" \t╔═════════════════════════════╗\n");printf(" \t║**********************************************************║\n");printf(" \t║***┏━━━━━━━━━━━━━━━━━━━━━━━━┓***║\n");printf(" \t║***┃************************************************┃***║\n");printf(" \t║***┃*** ****┃***║\n");printf(" \t║***┃*** ****┃***║\n");printf(" \t║***┃*** ****┃***║\n");printf(" \t║***┃*** 欢迎进入成绩管理系统****┃***║\n");printf(" \t║***┃*** ****┃***║\n");printf(" \t║***┃*** ****┃***║\n");printf(" \t║***┃*** 作者:王运知施蛟龙****┃***║\n");printf(" \t║***┃*** ****┃***║\n");printf(" \t║***┃************************************************┃***║\n");printf(" \t║***┗━━━━━━━━━━━━━━━━━━━━━━━━┛***║\n");printf(" \t║**********************************************************║\n");printf(" \t╚═════════════════════════════╝\n");for(i=0;i<3;i++){printf("\n请输入用户名:");gets(username);printf("\n请输入6位密码:");gets(pwd);if((strcmp(username,"wangyunzhi")==0)&&(strcmp(pwd,"123456")==0)){printf("\n您已经成功登录\n");k=1;for(i=0;i<20;i++){printf(".");Sleep(100);}system("cls");menu();break;}elseprintf("\n用户名或密码无效请重新输入:\n");continue;}if(k==0)printf("\n连续输入错误3次将退出程序\n");Sleep(2000);quit();}。
c++语言学生成绩管理系统源代码
我是电大的学生,这是struct 类型的c 语言学生成绩管理系统代码,大家交流一下#include<stdio.h>#include<string.h> #include<stdlib.h>#define MAXN 100 //#define MAXN 100 //一个班最多的人数一个班最多的人数#define MAXM 2 //#define MAXM 2 //成绩的课程门数成绩的课程门数int R;void input(); //1.void input(); //1.学生成绩新建学生成绩新建void sort(); //2.void sort(); //2.学生成绩插入学生成绩插入void load(); //3.void load(); //3.学生成绩修改学生成绩修改void print(); //4.void print(); //4.学生成绩删除学生成绩删除void total(); //5.void total(); //5.学生成绩统计学生成绩统计void search(); //6.void search(); //6.学生成绩查询学生成绩查询void save(); //7.void save(); //7.学生成绩保存学生成绩保存void end(); //8.void end(); //8.结束结束struct student{char name[20]; //char name[20]; //保存全班姓名保存全班姓名保存全班姓名char num[12]; // char num[12]; //保存全班学号保存全班学号保存全班学号char man[20]; //char man[20]; //保存全班性别保存全班性别保存全班性别float score[MAXM]; //float score[MAXM]; //保存全班所有课程成绩保存全班所有课程成绩保存全班所有课程成绩 float sum; //float sum; //保存全班每个人的总成绩保存全班每个人的总成绩保存全班每个人的总成绩float avg; // float avg; //保存每个人的平均成绩保存每个人的平均成绩保存每个人的平均成绩};struct student s[MAXN];struct http{char subject[20]; //char subject[20]; //保存全班所有课程保存全班所有课程保存全班所有课程};struct http c[MAXM];void main() //void main() //欢迎首界面欢迎首界面欢迎首界面{ int select,l;system("color fC");printf("\n");printf("\n");printf("\n");printf("\n");printf(" printf(" ¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥\n"); \n"); printf(" * *\n"); printf(" * *\n"); printf(" * printf(" * 欢迎进入终极一班学生管理系统欢迎进入终极一班学生管理系统欢迎进入终极一班学生管理系统 *\n"); *\n"); printf(" * *\n"); printf(" * ︻┳═一︻┳═一︻┳═一 cf ... *\n"); cf ... *\n"); printf(" * printf(" * ┈━═☆甘总管的多塔生活∝╬══→┈━═☆甘总管的多塔生活∝╬══→┈━═☆甘总管的多塔生活∝╬══→ *\n"); *\n"); printf(" * *\n"); printf(" * printf(" * 凸凸^-^^-^凸凸凸凸凸凸^-^^-^^-^凸凸凸凸凸凸^-^^-^^-^凸凸凸凸凸凸^-^^-^^-^凸凸凸凸凸凸^-^^-^^-^凸凸凸凸凸凸^-^^-^^-^凸凸凸凸凸凸^-^^-^^-^凸凸 *\n"); printf(" printf(" ¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥\n"); \n"); printf(" printf(" ╭ ╭ ╭ v v v╮╮ ╔══╗╔╗╔══╗╔╗ ╔╗╔╗╔╗╔╗╔╗╔╗ ╭╭''''''╮╮\n");printf(" (@ ^o^ @)╚╗╔╝║║╔═╦╦╦═╗║╚╝╠═╦╦╗(~ : : ~~)\n");printf(" (~) : (~)╔╝╚╗║╚╣║║║║╠╣╚╗╔╣║║║║(~) v (~)\n");printf(" ╚══╝╚═╩═╩═╩═╝ ╚╝╚═╩═╝ \n");printf("\n");printf("\n");printf(" printf(" 请按任意键进入下一界面请按任意键进入下一界面请按任意键进入下一界面\n"); \n");printf("------------------------------------------------------------------\n"); system("pause");system("color f2");system("color f1");system("color f3"); system("color fE");system("color fB");system("color f5");system("color f9");system("color f6");system("color f1");system("color f3");system("color fE");system("color fB");system("color f5");system("color f9"); system("color f6");system("color f1");system("color f3");system("color f5");system("color f9");system("color f6");system("color fD");system("pause");system("color fC");system("cls"); // system("cls"); //上面是第一个界面上面是第一个界面上面是第一个界面while(1){system("cls");printf(" ****************欢迎进入终极一班学生管理系统****************\n");printf(" ******************************************************\n");printf(" * ∝╬══→ 1.学生成绩新建 囧rz 欢 *\n");printf(" * ::======>> 2. 2.学生成绩插入学生成绩插入学生成绩插入 迎迎 *\n"); printf(" * printf(" * ┈━═☆┈━═☆┈━═☆ 3. 3.学生成绩修改学生成绩修改学生成绩修改 来来 *\n"); printf(" * printf(" * ∝╬══→∝╬══→∝╬══→ 4. 4.学生成绩删除学生成绩删除学生成绩删除 到到 *\n"); printf(" * ∝╬══→∝╬══→ 5. 5.学生成绩统计学生成绩统计学生成绩统计 英英 *\n"); printf(" * printf(" * ∝╬══→∝╬══→∝╬══→ 6. 6.学生成绩查询学生成绩查询学生成绩查询 雄雄 *\n"); printf(" * printf(" * ▄︻┻═┳▄︻┻═┳▄︻┻═┳ 7. 7.学生成绩保存学生成绩保存学生成绩保存 联联 *\n"); printf(" * printf(" * ∝╬══→∝╬══→∝╬══→ 8. 8.退出退出退出//撒拉嘿撒拉嘿 盟盟 *\n"); printf(" * ( printf(" * (⊙_⊙⊙_⊙⊙_⊙)()()(⊙_⊙⊙_⊙⊙_⊙)()()(⊙_⊙⊙_⊙⊙_⊙)()()(⊙_⊙⊙_⊙⊙_⊙)()()(⊙_⊙⊙_⊙⊙_⊙)()()(⊙_⊙⊙_⊙⊙_⊙) *\n"); ) *\n");printf(" ******************************************************\n"); printf("\n"); printf("\n printf("\n"); printf("\n 请输入您的选择编号请输入您的选择编号请输入您的选择编号,,回车键继续:回车键继续:\n"); \n");printf("---------------------------------------------------------------------------\n"); scanf("%d",&select);do {if(select<1||select>8){printf(" printf(" 您输入有误,请重新输入,谢谢!您输入有误,请重新输入,谢谢!!!\n"); scanf("%d",&select);}l=select;}while(l<1||l>8);switch(select) {case 1:input();break; //1. case 1:input();break; //1.学生成绩新建学生成绩新建学生成绩新建case 2:sort(); break; //2. case 2:sort(); break; //2.学生成绩插入学生成绩插入学生成绩插入case 3:load(); break; //3. case 3:load(); break; //3.学生成绩修改学生成绩修改学生成绩修改case 4:print(); break; //4. case 4:print(); break; //4.学生成绩删除学生成绩删除学生成绩删除case 5:total();break; //5. case 5:total();break; //5.学生成绩统计学生成绩统计学生成绩统计case 6:search();break; //6. case 6:search();break; //6.学生成绩查询学生成绩查询学生成绩查询case 7:save();break; //7. case 7:save();break; //7.学生成绩保存学生成绩保存学生成绩保存case 8: end();break; //8. case 8: end();break; //8.结束结束结束default:printf(" default:printf(" 请按相应数学选择系统功能:请按相应数学选择系统功能:请按相应数学选择系统功能:"); ");}}}void input() //1学生成绩输入成绩模块成绩输入成绩模块{int i,j,b;float a=0;printf(" printf(" 请输入该班同学的人数:请输入该班同学的人数:请输入该班同学的人数:\n"); \n");printf(" printf(" 班同学的人数在班同学的人数在1~%d 之间:之间:\n",MAXN); \n",MAXN);scanf("%d",&R);do{if(R<1||R>100){printf(" printf(" 您输入有误,请重新输入,谢谢!您输入有误,请重新输入,谢谢!!!\n"); scanf("%d",&R);}b=R;} while(b<1||b>100);for(i=0;i<MAXM;i++){printf(" printf(" 请输入该班同学的第请输入该班同学的第请输入该班同学的第%d %d 门课程名称为:门课程名称为:\n",(i+1)); \n",(i+1));scanf("%s", &c[i].subject);}for(i=0;i<R;i++){printf(" printf(" 请输入第请输入第请输入第%d %d 个同学的姓名:个同学的姓名:\n",(i+1)); \n",(i+1)); scanf("%s",&s[i].name);printf(" printf(" 请输入第请输入第请输入第%d %d 个同学的学号:个同学的学号:\n",(i+1)); \n",(i+1));scanf("%s",&s[i].num);printf(" printf(" 请输入第请输入第请输入第%d %d 个同学的性别(注:可以不详):\n",(i+1)); scanf("%s",&s[i].man);printf(" printf(" 请依次输入请依次输入请依次输入%d %d 门学科的成绩:门学科的成绩:\n",MAXM); \n",MAXM);for(j=0;j<MAXM;j++){printf(" printf(" 请输入课程请输入课程请输入课程%s %s 的成绩为:的成绩为:\n",c[j].subject); \n",c[j].subject);scanf("%f",&s[i].score[j]);a=a+s[i].score[j];}s[i].sum=a;s[i].avg=s[i].sum/MAXM;a=0;}}void sort() //2学生成绩插入成绩模块模块{int i,j,k,b;float a=0;printf(" printf(" 请输入要插入的学生的位置请输入要插入的学生的位置1~%d 号:号:\n",R); \n",R);printf(" printf(" 第几个学生的位置之后:第几个学生的位置之后:第几个学生的位置之后:\n"); \n");scanf("%d",&k);do{if(k<1||k>R){printf(" printf(" 您输入有误,请重新输入,谢谢!您输入有误,请重新输入,谢谢!!!\n"); scanf("%d",&k);}b=k;}while(b<1||b>R);R=R+1;for(i=R;i>k;i--){strcpy(s[i].name,s[i-1].name);strcpy(s[i].num,s[i-1].num);strcpy(s[i].man,s[i-1].man);s[i].sum=s[i-1].sum;s[i].avg=s[i-1].avg;for(j=0;j<MAXM;j++) {s[i].score[j]=s[i-1].score[j];}}printf(" printf(" 请输入第请输入第请输入第%d %d 个同学的姓名:个同学的姓名:\n",(k+1)); \n",(k+1));scanf("%s",&s[k].name);printf(" printf(" 请输入第请输入第请输入第%d %d 个同学的学号:个同学的学号:\n",(k+1)); \n",(k+1));scanf("%s",&s[k].num);printf(" printf(" 请输入第请输入第请输入第%d %d 个同学的性别(注:可以不详):\n",(k+1)); scanf("%s",&s[k].man);printf(" printf(" 请依次输入请依次输入请依次输入%d %d 门学科的成绩:门学科的成绩:\n",MAXM); \n",MAXM);for(j=0;j<MAXM;j++){printf(" printf(" 请输入课程请输入课程请输入课程%s %s 的成绩为:的成绩为:\n",&c[j].subject); \n",&c[j].subject);scanf("%f", &s[k].score[j]);a=a+s[k].score[j];}s[k].sum=a;s[k].avg=s[k].sum/MAXM;}void load() //3学生成绩修改学生成绩修改 {int load1(); int load2();int select,index,b;while(1){printf("*************************************************************\n");printf(" * 1.按学号修改按学号修改 * * \n");printf(" * 2.按姓名修改按姓名修改 * * \n"); printf(" * 0.返回返回 * * \n");printf(" * 请输入您的选择编号:请输入您的选择编号: * * \n");printf("*************************************************************\n");scanf("%d",&select);do{if(select<0||select>2){printf(" printf(" 您输入有误,请重新输入,谢谢!您输入有误,请重新输入,谢谢!!!\n"); scanf("%d",&select);}b=select;}while(b<0||b>2);switch(select){case 1:index=load1(); break;case 2:index=load2();break;case 0:return;}if(index!=-1){int i,j;float a=0,h[MAXM];i=index;printf(" printf(" 请输入请输入请输入%d %d 号的新学号:号的新学号: \n",i+1); \n",i+1);scanf("%s",&s[i].name);printf(" printf(" 请输入请输入请输入%d %d 号的新姓名:号的新姓名: \n",i+1); \n",i+1); scanf("%s",&s[i].num);printf(" printf(" 请输入第请输入第请输入第%d %d 个同学的性别(注:可以不详):\n",(i+1)); scanf("%s",&s[i].man);for(j=0;j<MAXM;j++){printf(" printf(" 请输入课程请输入课程请输入课程%s %s 的成绩为:的成绩为:\n",&c[j].subject); \n",&c[j].subject);scanf("%f",&h[j]);s[i].score[j] =h[j];a=a+s[i].score[j];}s[i].sum=a;s[i].avg=s[i].sum/MAXM;printf(" printf(" 修改成功。
学生成绩管理系统的设计与实现代码
学生成绩管理系统的设计与实现代码本系统有增加学生记录、修改学生记录、删除学生记录、按姓名查询学生记录、按C语言成绩对学生进行排序、退出系统6大功能。
能够对学生的姓名,学号,c语言成绩做相应的操作。
在检测到输入成绩大于55时,会自动加上5。
该管理系统设计功能模块图:下面是源代码:#include "stdio.h"#include "string.h"/*定义学生结构体*/struct Student{char ID[20]; //学号char Name[20]; //姓名float C_Mark; //C语言成绩};/*声明学生数组及学生数量*/struct Student students[1000];int num=0;/*通过学号返回数组下标*/int Student_SearchByIndex(char id[]) {int i;for (i=0;i<num;i++){if (strcmp(students[i].ID,id)==0) {return i;}}return -1;}/*通过姓名返回数组下标*/int Student_SearchByName(char name[]) {int i;for (i=0;i<num;i++){if (strcmp(students[i].Name,name)==0){return i;}}return -1;}/*显示单条学生记录*/void Student_DisplaySingle(int index){printf("%10s%10s%8s\n","学号","姓名","C语言成绩");printf("-------------------------------------------------------------\n");printf("%10s%10s%8.2f\n",students[index].ID,students[index] .Name,students[index].C_Mark);}/****1、增加学生记录*****/void Student_Insert(){while(1){printf("请输入学号:");scanf("%s",&students[num].ID);getchar();printf("请输入姓名:");scanf("%s",&students[num].Name);getchar();printf("请输入C语言成绩:");scanf("%f",&students[num].C_Mark);getchar();if (54<students[num].C_Mark && students[num].C_Mark< 60) //把55~59分之间的成绩都加上5分{students[num].C_Mark += 5;}num++;printf("是否继续?(Y/N),继续请按任意键,否则输入N:");if (getchar()=='N'){break;}}}/******2、修改学生信息**********/void Student_Modify(){while(1){char id[20];int index;printf("请输入要修改的学生的学号:");scanf("%s",&id);getchar();index=Student_SearchByIndex(id);if (index==-1){printf("该学生不存在!\n");}else{printf("你要修改的学生信息为:\n");Student_DisplaySingle(index);printf("-- 请输入新值--\n");printf("请输入学号:");scanf("%s",&students[index].ID);getchar();printf("请输入姓名:");scanf("%s",&students[index].Name);getchar();printf("请输入C语言成绩:");scanf("%f",&students[index].C_Mark);getchar();}printf("是否继续?(Y/N),继续请按任意键,否则输入N:");if (getchar()=='N'){break;}}}/****3、删除学生信息****/void Student_Delete(){int i;while(1){char id[20];int index;printf("请输入要删除的学生的学号:");scanf("%s",&id);getchar();index=Student_SearchByIndex(id);if (index==-1){printf("学生不存在!\n");}else{printf("你要删除的学生信息为:\n");Student_DisplaySingle(index);printf("是否真的要删除?(Y/N)");if (getchar()=='Y'){for (i=index;i<num-1;i++){students[i]=students[i+1];//把后边的对象都向前移动}num--;}getchar();printf("已删除\n");}printf("是否继续删除?(Y/N),继续请按任意键,否则输入N:");if (getchar()=='N'){break;}}}/****4、按姓名查询******/void Student_Select(){while(1){char name[20];int index;printf("请输入要查询的学生的姓名:");scanf("%s",&name);getchar();index=Student_SearchByName(name);if (index==-1){printf("学生不存在!\n");}else{printf("你要查询的学生信息为:\n");Student_DisplaySingle(index);}printf("是否继续?(Y/N),继续请按任意键,否则输入N:");if (getchar()=='N'){break;}}}/******5、按C语言成绩排序*******/void Student_SortByAverage(){int i,j;struct Student tmp;for (i=0;i<num;i++){for (j=1;j<num-i;j++){if (students[j-1].C_Mark<students[j].C_Mark){tmp=students[j-1];students[j-1]=students[j];students[j]=tmp;}}}}/*显示学生信息*/void Student_Display(){int i;printf("%10s%10s%8s\n","学号","姓名","成绩");printf("-------------------------------------------------------------\n");for (i=0;i<num;i++){printf("%10s%10s%8.2f\n",students[i].ID,students[i].Name ,students[i].C_Mark);}}/*将学生信息从文件(Database.txt)中读出*/void IO_ReadInfo(){FILE *fp;int i;if ((fp=fopen("Database.txt","rb"))==NULL){printf("不能打开文件!\n");return;}if (fread(&num,sizeof(int),1,fp)!=1){num=-1;}else{for(i=0;i<num;i++){fread(&students[i],sizeof(struct Student),1,fp);}}fclose(fp);}/*将学生信息写入文件(Database.txt)*/void IO_WriteInfo(){FILE *fp;int i;if ((fp=fopen("Database.txt","wb"))==NULL){printf("不能打开文件!\n");return;}if (fwrite(&num,sizeof(int),1,fp)!=1){printf("写入文件错误!\n");}for (i=0;i<num;i++){if (fwrite(&students[i],sizeof(struct Student),1,fp)!=1){printf("写入文件错误!\n");}}fclose(fp);}/***********主程序*********/void main(){int choice;IO_ReadInfo(); //读取文件while(1){/*主菜单*/printf("\n------ 学生成绩管理系统------\n");printf("1. 增加学生记录\n");printf("2. 修改学生记录\n");printf("3. 删除学生记录\n");printf("4. 按姓名查询学生记录\n");printf("5. 按C语言成绩排序\n");printf("6. 退出\n");printf("请选择(1-6):");scanf("%d",&choice);getchar();switch(choice){case 1:Student_Insert();break;case 2:Student_Modify();break;case 3:Student_Delete();break;case 4:Student_Select();break;case 5:Student_SortByAverage();Student_Display();break;case 6:exit(0);break;}IO_WriteInfo();}}1234567891011121415161718192021222324252627282930313233343637383940414243444546474849505152535455565859606162636465666768697071727374757677788081828384858687888990919293949596979899 100102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320322323324325326327328329330331332333334335336337338运行结果:测试第一个功能,输入四个学生的成绩:测试第二个功能,修改学生记录:测试第三个功能,删除学生记录:测试第四个功能,按姓名查询学生记录:测试第五个功能,显示所有学生的成绩,按照C语言成绩由高到底排序:我们可以看到,各项功能的实现,在第2个步骤中,将赵的成绩改为80,而第3个步骤删除了李的成绩。
学生成绩管理系统代码
#include<stdio.h>#include<windows.h>#include<string.h>#include<time.h>#include<conio.h>struct Stu //定义结构体{char Num[10];//学号char Name[10];//姓名char Sex;//性别char Gread[10];//班级double Chinese;//语文成绩double Math;//数学成绩double English;//英语成绩double All;//总分int mark;}student[100]={{"10001","罗兰花花",'M',"c1",100,90,80,270,1},{"10002","罗兰星星",'M',"c1",99,89,79,267,1},{"10003","罗兰小天",'F',"c1",88,88,78,254,1},{"10004","罗兰龙帝",'M',"c1",97,87,77,261,1},{"10005","罗兰芳儿",'F',"c2",96,86,76,258,1},{"10006","罗兰夜听",'M',"c2",95,85,75,255,1},{"10007","罗兰唯美",'F',"c2",54,84,94,232,1},{"10008","罗兰人才",'M',"c2",93,83,73,249,1} };//函数声明void face1();//启动页面1void face2();//启动页面2void face3();//菜单页面void face4();//查找子菜单void face5();//排序子菜单void face6();//统计子菜单void face7();//按科统计评级学生子菜单void Menu();///////////////主菜单void Print();//输出函数void Add();//添加函数void Change();//修改函数void Delete();//删除函数void Deleall();//清空函数void Search();////////////查找菜单void Search1();//查找指定姓名学号函数void Search2();//按班级查找void Search3();//按性别查找void Sort();///////////////排序菜单void Sort1();//按总分排序函数void Sort2();//按学号排序void Sort3();//按姓名排序void Total();//////////////统计菜单void Total1();//统计所有void Total2();//按班级统计int count =8;//系统中已有学生的人数void face1()//启动页面1{int i,j;int a;system("color B");printf("\t\t\t请输入你喜欢的文字颜色\n");printf("\t\t\t ═════════════════════\n");printf("\t\t\t║\t0 = 黑色 8 = 灰色║\n");printf("\t\t\t║\t1 = 蓝色 9 = 淡蓝色║\n");printf("\t\t\t║\t2 = 绿色 10= 淡绿色║\n");printf("\t\t\t║\t3 = 浅绿色 11= 淡浅绿色║\n");printf("\t\t\t║\t4 = 红色 12= 淡红色║\n");printf("\t\t\t║\t5 = 紫色 13= 淡紫色║\n");printf("\t\t\t║\t6 = 黄色 14= 淡黄色║\n");printf("\t\t\t║\t7 = 白色 15= 亮白色║\n");printf("\t\t\t╚════════════════════╝\n");printf("\t\t\t请选择:");scanf("%d",&a);switch(a){case 1:system("color 1");break;case 2:system("color 2");break;case 3:system("color 3");break;case 4:system("color 4");break;case 5:system("color 5");break;case 6:system("color 6");break;case 7:system("color 7");break;case 8:system("color 8");break;case 9:system("color 9");break;case 10:system("color A");break;case 11:system("color B");break;case 12:system("color C");break;case 13:system("color D");break;case 14:system("color E");break;case 15:system("color F");break;}system("cls");getchar();printf("\t\t\t正在启动学生成绩管理系统请等待\n");printf("\t\t\t");for(j=0;j<30;j++){for(i=0;i<50000000;i++); //为每一个符号输出创造时延printf(">");}printf("\n");//system("cls");}//登陆页面2void face2(){int i;char c;char name[20],password[20]={0},str1[20]="jack",str2[20]="123456";printf("\n\n\t>>>>>>>>>>>>>>>>>>>>>欢迎进入学生成绩管理系统<<<<<<<<<<<<<<<<<<\n\n");printf("\t O(∩_∩)O~\t\t\t\t\n");printf("\t\t★ \n");printf("\t\t★ \n");printf("\t\t★★★★★★★★ \n");printf("\t\t★★★★★★★ \n");printf("\t\t★★★★★★ \n");printf("\t\t★★★★★★★★★★ \n");printf("\t\t★★★★★★ \n");printf("\t\t★★★★★★ \n");printf("\t\t★★★★★★★★★★★★ \n\n");printf("\t>>>>>>>>>请输入登陆信息(帐号:jack,密码:123456):<<<<<<<<<<\n\n");do{printf("\t\t\t请输入你的姓名:");gets(name);if(strcmp(name,str1)) printf("\t\t\t输入有误!!!\n");}while(strcmp(name,str1));do{i=0;printf("\t\t\t请输入密码:");while((c=getch())!=13){if(c==8){if(i==0)continue;putchar('\b');putchar(' ');putchar('\b');password[--i]=0;continue;}printf("*");password[i++]=c;}//password[i]=0;//gets(password);if(strcmp(password,str2)) printf("\t\t\t输入有误!!!\n");}while(strcmp(password,str2));printf("\t\t\t登陆成功\n");}void face3()//菜单页面{printf("\t\n");printf("\t ═════════════════════════════\n"); printf("\t║║\n"); printf("\t║学生成绩管理系统║\n"); printf("\t║───────────────—║\n"); //printf("\t║ \n"); printf("\t║ 1.查看所有学生信息║\n"); printf("\t║║\n"); printf("\t║ 2.添加学生成绩║\n"); printf("\t║║\n"); printf("\t║ 3.修改指定学生信息成绩║\n"); printf("\t║║\n"); printf("\t║ 4.删除指定学生成绩║\n"); printf("\t║║\n"); printf("\t║ 5.清空所有学生成绩║\n"); printf("\t║║\n"); printf("\t║ 6.查询指定学生成绩║\n"); printf("\t║║\n"); printf("\t║ 7.按要求排序学生成绩║\n"); printf("\t║║\n"); printf("\t║ 8.按要求统计学生成绩║\n"); printf("\t║║\n");printf("\t║ 9.退出该系统║\n"); printf("\t║║\n"); printf("\t║请输入你的选择(1~9) ║\n"); printf("\t║───────────────—║\n"); printf("\t╚════════════════════════════╝\n");printf("\t 你的选择是:");}void face4()//查找子菜单{printf("\t╔════════════════════════╗\n");printf("\t║║\n");printf("\t║查找子菜单║\n");printf("\t║───────────────—║\n");printf("\t║║\n");printf("\t║ 1.查找指定姓名或学号学生信息║\n");printf("\t║║\n");printf("\t║ 2.查找指定班级的学生信息║\n");printf("\t║║\n");printf("\t║ 3.查找指定性别的学生信息║\n");printf("\t║║\n");printf("\t║ 4.返回主菜单║\n");printf("\t║║\n");printf("\t║请输入你的选择(1~4) ║\n");printf("\t║───────────────—║\n");printf("\t╚════════════════════════╝\n");printf("\t 你的选择是:");}void face5()//排序子菜单{printf("\t╔════════════════════════╗\n");printf("\t║║\n");printf("\t║排序子菜单║\n");printf("\t║───────────────—║\n");printf("\t║║\n");printf("\t║ 1.按照总分排序║\n");printf("\t║║\n");printf("\t║ 2.按照学号排序║\n");printf("\t║║\n");printf("\t║ 3.按照姓名排序║\n");printf("\t║║\n");printf("\t║ 4.返回主菜单║\n");printf("\t║║\n");printf("\t║请输入你的选择(1~4) ║\n"); printf("\t║───────────────—║\n"); printf("\t╚════════════════════════╝\n");printf("\t 你的选择是:");}void face6()//统计子菜单{printf("\t╔════════════════════════╗\n"); printf("\t║║\n"); printf("\t║统计子菜单║\n"); printf("\t║───────────────—║\n"); printf("\t║║\n"); printf("\t║ 1.统计所有学生信息║\n"); printf("\t║║\n");printf("\t║ 2.统计指定班级学生信息║\n"); printf("\t║║\n");printf("\t║ 3.统计各科显示学生评级信息║\n"); printf("\t║║\n"); printf("\t║ 4.返回主菜单║\n"); printf("\t║║\n"); printf("\t║请输入你的选择(1~4) ║\n"); printf("\t║───────────────—║\n"); printf("\t╚════════════════════════╝\n");printf("\t 你的选择是:");}void face7()//按科统计评级学生子菜单{printf("\t╔════════════════════════╗\n"); printf("\t║║\n"); printf("\t║评级子菜单║\n"); printf("\t║───────────────—║\n"); printf("\t║║\n"); printf("\t║ 1.按语文显示学生评级信息║\n"); printf("\t║║\n");printf("\t║ 2.按数学显示学生评级信息║\n"); printf("\t║║\n");printf("\t║ 3.按英语显示学生评级信息║\n"); printf("\t║║\n"); printf("\t║ 4.返回主菜单║\n"); printf("\t║║\n"); printf("\t║请输入你的选择(1~4) ║\n"); printf("\t║───────────────—║\n"); printf("\t╚════════════════════════╝\n");printf("\t 你的选择是:");}void Print()//输出所有学生信息{int i=0;printf("\t\t---学号----姓名---性别--班级---语文----数学----英语----总分---\n");for(i=0;i<100;i++){if(student[i].mark!=0){printf("\t\t");printf("%7s %7s %5c %4s %7.2lf %7.2lf %7.2lf %7.2lf\n",student[i].Num,student[ i].Name,student[i].Sex,student[i].Gread,student[i].Chinese,student[i].Math,student [i].English,student[i].All);}}printf("\n\t\t所有学生信息已全部输出!\n");}void Add()//添加学生函数{char choose;int i=0;do{printf("\t\t请按提示输入学生信息\n");do{printf("\n\t\t请输入学号:");fflush(stdin);scanf("%s",student[count].Num);for(i=0;i<count;i++){if((strcmp(student[count].Num,student[i].Num)==0)&&(student[i].mark==1)){printf("\t\t该学号已存在!请重新输入!\n");break;}}}while(i!=count);printf("\n\t\t请输入姓名:");fflush(stdin);scanf("%s",student[count].Name);printf("\n\t\t请输入性别:");//scanf("%c",&student[count].Sex);fflush(stdin);student[count].Sex=getchar();printf("\n\t\t请输入班级:");fflush(stdin);scanf("%s",&student[count].Gread);do{printf("\n\t\t请输入语文成绩:");fflush(stdin);scanf("%lf",&student[count].Chinese);if(student[count].Chinese>100||student[count].Chinese<0) {printf("\t\t输入错误请重新输入!\n");}else{break;}}while(1);do{printf("\n\t\t请输入数学成绩:");fflush(stdin);scanf("%lf",&student[count].Math);if(student[count].Math>100||student[count].Math<0){printf("\t\t输入错误请重新输入!\n");}else{break;}}while(1);do{printf("\n\t\t请输入英语成绩:");fflush(stdin);scanf("%lf",&student[count].English);if(student[count].English>100||student[count].English<0) {printf("\t\t输入错误请重新输入!\n");}else{break;}}while(1);student[count].All=student[count].Chinese+student[count].Math+student[count].E nglish;student[count].mark=1;count++;printf("\t\t添加成功\n");Print();printf("\t\t是否继续(Y/N)?");fflush(stdin);choose=getchar();getchar();if(choose=='N'||choose=='n'){break;}printf("\t\t");system("pause");system("cls");}while(1);}void Change()//修改学生信息函数{char choose;int i=0;char str[10];do{printf("\t\t请按提示输入学生信息\n");do{printf("\n\t\t请输入你要修改的学生学号或者姓名:");fflush(stdin);scanf("%s",str);for(i=0;i<count;i++){if(((strcmp(student[i].Num,str)==0)||(strcmp(student[i].Name,str))==0)&&(stude nt[i].mark==1)){break;}}if(i==count){printf("\t\t查无此人\n");}else{printf("\t\t");printf("%7s %7s %5c %4s %7.2lf %7.2lf %7.2lf %7.2lf\n",student[i].Num,student[ i].Name,student[i].Sex,student[i].Gread,student[i].Chinese,student[i].Math,student [i].English,student[i].All);// break;// }// }while(i!=count);printf("\n\t\t请输入姓名:");fflush(stdin);scanf("%s",student[i].Name);printf("\n\t\t请输入性别:");//scanf("%c",&student[count].Sex);fflush(stdin);student[i].Sex=getchar();printf("\n\t\t请输入班级:");fflush(stdin);scanf("%s",&student[i].Gread);do{printf("\n\t\t请输入语文成绩:");fflush(stdin);scanf("%lf",&student[i].Chinese);if(student[i].Chinese>100||student[i].Chinese<0){printf("\t\t输入错误请重新输入!\n");}else{break;}}while(1);do{printf("\n\t\t请输入数学成绩:");fflush(stdin);scanf("%lf",&student[i].Math);if(student[i].Math>100||student[i].Math<0){printf("\t\t输入错误请重新输入!\n");}else{break;}}while(1);do{printf("\n\t\t请输入英语成绩:");fflush(stdin);scanf("%lf",&student[i].English);if(student[i].English>100||student[i].English<0){printf("\t\t输入错误请重新输入!\n");}else{break;}}while(1);student[i].All=student[i].Chinese+student[i].Math+student[i].English;//student[count].mark=1;break;}}while(1);printf("\t\t修改成功\n");Print();printf("\t\t是否继续(Y/N)?");fflush(stdin);choose=getchar();getchar();if(choose=='N'||choose=='n'){break;}printf("\t\t");system("pause");system("cls");}while(1);}void Delete()//删除指定学生函数char choose;int i=0;char str[10];do{printf("\t\t请按提示输入学生信息\n");do{printf("\n\t\t请输入你要删除的学生学号或者姓名:");fflush(stdin);scanf("%s",str);for(i=0;i<count;i++){if(((strcmp(student[i].Num,str)==0)||(strcmp(student[i].Name,str))==0)&&(stude nt[i].mark==1)){break;}}if(i==count){printf("\t\t查无此人");}else{break;}}while(1);student[i].mark=0;printf("\t\t删除成功\n");count--;Print();printf("\t\t是否继续(Y/N)?");fflush(stdin);choose=getchar();getchar();if(choose=='N'||choose=='n'){break;}printf("\t\t");system("pause");system("cls");}while(1);void Deleall()//清空全部学生函数并一键恢复数据{char choose;int i=0;printf("\t\t请确认是否全部删除(Y/N)?\n");fflush(stdin);printf("\t\t");choose=getchar();getchar();if(choose=='y'||choose=='Y'){for(i=0;i<count;i++){student[i].mark=0;}printf("\t\t删除成功!\n");Print();}printf("\t\t请确认是否一键恢复全部数据(Y/N)?\n"); fflush(stdin);printf("\t\t");choose=getchar();getchar();if(choose=='y'||choose=='Y'){for(i=0;i<count;i++){student[i].mark=1;}printf("\t\t恢复成功!\n");Print();}printf("\t\t");system("pause");system("cls");}void Search1()//查找指定姓名学号函数{char choose;int i=0;char str[10];do{printf("\t\t请按提示输入学生信息\n");do{printf("\n\t\t请输入你要查找的学生学号或者姓名:");fflush(stdin);scanf("%s",str);for(i=0;i<count;i++){if((strcmp(student[i].Num,str)==0)||(strcmp(student[i].Name,str))==0){break;}}if(i==count){printf("\t\t查无此人\n");}else{printf("\t\t");printf("%7s %7s %5c %4s %7.2lf %7.2lf %7.2lf %7.2lf\n",student[i].Num,student[ i].Name,student[i].Sex,student[i].Gread,student[i].Chinese,student[i].Math,student [i].English,student[i].All);break;}}while(i!=count);printf("\t\t是否继续(Y/N)?");fflush(stdin);choose=getchar();getchar();if(choose=='N'||choose=='n'){break;}printf("\t\t");system("pause");system("cls");}while(1);}void Search2() //查找指定班级学生函数{char choose;int i=0;int flag;char str[10];do{printf("\t\t请按提示输入学生信息\n");do{printf("\n\t\t请输入你要查找的学生班级:");fflush(stdin);scanf("%s",str);flag=0;for(i=0;i<count;i++){if(strcmp(student[i].Gread,str)==0){printf("\t\t");printf("%7s %7s %5c %4s %7.2lf %7.2lf %7.2lf %7.2lf\n",student[i].Num,student[ i].Name,student[i].Sex,student[i].Gread,student[i].Chinese,student[i].Math,student [i].English,student[i].All);flag=1;//break;}}if(flag==0){printf("\t\t查无此班级\n");}}while(i!=count);printf("\t\t是否继续(Y/N)?");fflush(stdin);choose=getchar();getchar();if(choose=='N'||choose=='n'){break;}printf("\t\t");system("pause");system("cls");}while(1);}void Search3() //查找指定性别学生函数{char choose;int i=0;int flag;char str;do{printf("\t\t请按提示输入学生信息\n");do{printf("\n\t\t请输入你要查找的学生性别:");fflush(stdin);scanf("%c",&str);flag=0;for(i=0;i<count;i++){if(student[i].Sex==str ){printf("\t\t");printf("%7s %7s %5c %4s %7.2lf %7.2lf %7.2lf %7.2lf\n",student[i].Num,student[ i].Name,student[i].Sex,student[i].Gread,student[i].Chinese,student[i].Math,student [i].English,student[i].All);flag=1;//break;}}if(flag==0){printf("\t\t查无此性别的学生\n");}}while(i!=count);printf("\t\t是否继续(Y/N)?");fflush(stdin);choose=getchar();getchar();if(choose=='N'||choose=='n'){break;}printf("\t\t");system("pause");system("cls");}while(1);}void Search()//查找菜单{char which;int choose=1;do{system("cls");face4();fflush(stdin);which=getchar();//system("pause");system("cls");switch(which){case '1':Search1();//system("pause");system("cls");break;case '2':Search2();//system("pause");system("cls");break;case '3':Search3();//system("pause");system("cls");break;case '4':choose=0;break;default:printf("\n\n\t\t输入错误,请重新选择!\n");printf("\t\t");system("pause");break;}}while(choose!=0);}void Sort1()//按总分升序排列{int i=0,j=0;struct Stu temp;for(i=0;i<count;i++){for(j=0;j<count-i-1;j++){if(student[j].All>student[j+1].All){temp=student[j];student[j]=student[j+1];student[j+1]=temp;}}}printf("\n\t\t排序成功!\n\n");Print();printf("\t\t");}void Sort2()//按学号排序{int i=0,j=0;struct Stu temp;for(i=0;i<count;i++){for(j=0;j<count-i-1;j++){if(strcmp(student[j].Num,student[j+1].Num)>0){temp=student[j];student[j]=student[j+1];student[j+1]=temp;}}}printf("\n\t\t排序成功!\n\n");Print();printf("\t\t");}void Sort3()//按姓名排序{int i=0,j=0;struct Stu temp;for(i=0;i<count;i++){for(j=0;j<count-i-1;j++){if(strcmp(student[j].Name,student[j+1].Name)>0){temp=student[j];student[j]=student[j+1];student[j+1]=temp;}}}printf("\n\t\t排序成功!\n\n");Print();printf("\t\t");}void Sort()//排序菜单{char which;int choose=1;do{system("cls");face5();fflush(stdin);which=getchar();//system("pause");system("cls");switch(which){case '1':Sort1();system("pause");system("cls");break;case '2':Sort2();system("pause");system("cls");break;case '3':Sort3();system("pause");system("cls");break;case '4':choose=0;break;default:printf("\n\n\t\t输入错误,请重新选择!\n");printf("\t\t");system("pause");break;}}while(choose!=0);}void Total1()//统计各科平均分、最高分和最高分学生信息{int i=0;int max[4]={0};double sum[4]={0};for(i=0;i<count;i++){sum[0]+=student[i].Chinese;sum[1]+=student[i].Math;sum[2]+=student[i].English;sum[3]+=student[i].All;if(student[max[0]].Chinese<student[i].Chinese){max[0]=i;}if(student[max[1]].Math<student[i].Math){max[1]=i;}if(student[max[2]].English<student[i].English){max[2]=i;}if(student[max[3]].All<student[i].All){max[3]=i;}}printf("\n\t\t语文平均分为:%.2lf\n",sum[0]/count);printf("\t\t最高分为是:%.2lf\n",student[max[0]].Chinese);printf("\t\t---学号----姓名---性别--班级---语文----数学----英语----总分---\n");printf("\t\t");printf("%7s %7s %5c %4s %7.2lf %7.2lf %7.2lf %7.2lf\n",student[max[0]].Num,stu dent[max[0]].Name,student[max[0]].Sex,student[max[0]].Gread,student[max[0]].Chines e,student[max[0]].Math,student[max[0]].English,student[max[0]].All);printf("\n\t\t数学平均分为:%.2lf\n",sum[1]/count);printf("\t\t最高分为是:%.2lf\n",student[max[1]].Math);printf("\t\t---学号----姓名---性别--班级---语文----数学----英语----总分---\n");printf("\t\t");printf("%7s %7s %5c %4s %7.2lf %7.2lf %7.2lf %7.2lf\n",student[max[1]].Num,stu dent[max[1]].Name,student[max[1]].Sex,student[max[1]].Gread,student[max[1]].Chines e,student[max[1]].Math,student[max[1]].English,student[max[1]].All);printf("\n\t\t英语平均分为:%.2lf\n",sum[2]/count);printf("\t\t最高分为是:%.2lf\n",student[max[2]].English);printf("\t\t---学号----姓名---性别--班级---语文----数学----英语----总分---\n");printf("\t\t");printf("%7s %7s %5c %4s %7.2lf %7.2lf %7.2lf %7.2lf\n",student[max[2]].Num,stu dent[max[2]].Name,student[max[2]].Sex,student[max[2]].Gread,student[max[2]].Chines e,student[max[2]].Math,student[max[2]].English,student[max[2]].All);printf("\n\t\t总分平均分为:%.2lf\n",sum[3]/count);printf("\t\t最高分为是:%.2lf\n",student[max[3]].All);printf("\t\t---学号----姓名---性别--班级---语文----数学----英语----总分---\n");printf("\t\t");printf("%7s %7s %5c %4s %7.2lf %7.2lf %7.2lf %7.2lf\n",student[max[3]].Num,stu dent[max[3]].Name,student[max[3]].Sex,student[max[3]].Gread,student[max[3]].Chines e,student[max[3]].Math,student[max[3]].English,student[max[3]].All);printf("\t\t");}void Total2()//统计各班各科平均分、最高分和最高分学生信息{int i=0;char str[10];int count1=0;int max[4]={99};double sum[4]={0};printf("\t\t请输入要统计的班级:\n");fflush(stdin);printf("\t\t");scanf("%s",str);for(i=0;i<count;i++){if(strcmp(student[i].Gread,str)==0){count1++;sum[0]+=student[i].Chinese;sum[1]+=student[i].Math;sum[2]+=student[i].English;sum[3]+=student[i].All;if(student[max[0]].Chinese<student[i].Chinese){max[0]=i;}if(student[max[1]].Math<student[i].Math){max[1]=i;}if(student[max[2]].English<student[i].English){max[2]=i;}if(student[max[3]].All<student[i].All){max[3]=i;}}}printf("%\t\t班成绩统计如下:\n\n");printf("\n\t\t语文平均分为:%.2lf\n",sum[0]/count1);printf("\t\t最高分为是:%.2lf\n",student[max[0]].Chinese);printf("\t\t---学号----姓名---性别--班级---语文----数学----英语----总分---\n");printf("\t\t");printf("%7s %7s %5c %4s %7.2lf %7.2lf %7.2lf %7.2lf\n",student[max[0]].Num,stu dent[max[0]].Name,student[max[0]].Sex,student[max[0]].Gread,student[max[0]].Chines e,student[max[0]].Math,student[max[0]].English,student[max[0]].All);printf("\n\t\t数学平均分为:%.2lf\n",sum[1]/count1);printf("\t\t最高分为是:%.2lf\n",student[max[1]].Math);printf("\t\t---学号----姓名---性别--班级---语文----数学----英语----总分---\n");printf("\t\t");printf("%7s %7s %5c %4s %7.2lf %7.2lf %7.2lf %7.2lf\n",student[max[1]].Num,stu dent[max[1]].Name,student[max[1]].Sex,student[max[1]].Gread,student[max[1]].Chines e,student[max[1]].Math,student[max[1]].English,student[max[1]].All);printf("\n\t\t英语平均分为:%.2lf\n",sum[2]/count1);printf("\t\t最高分为是:%.2lf\n",student[max[2]].English);printf("\t\t---学号----姓名---性别--班级---语文----数学----英语----总分---\n");printf("\t\t");printf("%7s %7s %5c %4s %7.2lf %7.2lf %7.2lf %7.2lf\n",student[max[2]].Num,stu dent[max[2]].Name,student[max[2]].Sex,student[max[2]].Gread,student[max[2]].Chines e,student[max[2]].Math,student[max[2]].English,student[max[2]].All);printf("\n\t\t总分平均分为:%.2lf\n",sum[3]/count1);printf("\t\t最高分为是:%.2lf\n",student[max[3]].All);printf("\t\t---学号----姓名---性别--班级---语文----数学----英语----总分---\n");printf("\t\t");printf("%7s %7s %5c %4s %7.2lf %7.2lf %7.2lf %7.2lf\n",student[max[3]].Num,stu dent[max[3]].Name,student[max[3]].Sex,student[max[3]].Gread,student[max[3]].Chines e,student[max[3]].Math,student[max[3]].English,student[max[3]].All);printf("\t\t");}void Total3()//统计各科优秀,及格,不及格学生信息{int i=0;//double a;int choose;char which;do{system("cls");face7();fflush(stdin);which=getchar();system("cls");switch(which){case '1'://a=student[i].Chinese;printf("\t\t优秀学生如下:\n");printf("\t\t---学号----姓名---性别--班级---语文----数学----英语----总分---\n");for(i=0;i<count;i++){if(student[i].Chinese>=80.0){printf("\t\t");printf("%7s %7s %5c %4s %7.2lf %7.2lf %7.2lf %7.2lf\n",student[i].Num,student[ i].Name,student[i].Sex,student[i].Gread,student[i].Chinese,student[i].Math,student [i].English,student[i].All);}printf("\t\t及格学生如下:\n");for(i=0;i<count;i++){if((student[i].Chinese<80.0)&&(student[i].Chinese>=60.0)){printf("\t\t");printf("%7s %7s %5c %4s %7.2lf %7.2lf %7.2lf %7.2lf\n",student[i].Num,student[ i].Name,student[i].Sex,student[i].Gread,student[i].Chinese,student[i].Math,student [i].English,student[i].All);}}printf("\t\t不及格学生如下:\n");for(i=0;i<count;i++){if(student[i].Chinese<60.0){printf("\t\t");printf("%7s %7s %5c %4s %7.2lf %7.2lf %7.2lf %7.2lf\n",student[i].Num,student[ i].Name,student[i].Sex,student[i].Gread,student[i].Chinese,student[i].Math,student [i].English,student[i].All);}}break;case '2'://a=student[i].Math;printf("\t\t优秀学生如下:\n");printf("\t\t---学号----姓名---性别--班级---语文----数学----英语----总分---\n");for(i=0;i<count;i++){if(student[i].Math>=80.0){printf("\t\t");printf("%7s %7s %5c %4s %7.2lf %7.2lf %7.2lf %7.2lf\n",student[i].Num,student[ i].Name,student[i].Sex,student[i].Gread,student[i].Chinese,student[i].Math,student [i].English,student[i].All);}}printf("\t\t及格学生如下:\n");for(i=0;i<count;i++)if((student[i].Math<80.0)&&(student[i].Math>=60.0)){printf("\t\t");printf("%7s %7s %5c %4s %7.2lf %7.2lf %7.2lf %7.2lf\n",student[i].Num,student[ i].Name,student[i].Sex,student[i].Gread,student[i].Chinese,student[i].Math,student [i].English,student[i].All);}}printf("\t\t不及格学生如下:\n");for(i=0;i<count;i++){if(student[i].Math<60.0){printf("\t\t");printf("%7s %7s %5c %4s %7.2lf %7.2lf %7.2lf %7.2lf\n",student[i].Num,student[ i].Name,student[i].Sex,student[i].Gread,student[i].Chinese,student[i].Math,student [i].English,student[i].All);}}break;case '3'://a=student[i].English;printf("\t\t优秀学生如下:\n");printf("\t\t---学号----姓名---性别--班级---语文----数学----英语----总分---\n");for(i=0;i<count;i++){if(student[i].English>=80.0){printf("\t\t");printf("%7s %7s %5c %4s %7.2lf %7.2lf %7.2lf %7.2lf\n",student[i].Num,student[ i].Name,student[i].Sex,student[i].Gread,student[i].Chinese,student[i].Math,student [i].English,student[i].All);}}printf("\t\t及格学生如下:\n");for(i=0;i<count;i++){if((student[i].English<80.0)&&(student[i].English>=60.0)){。
(完整word版)学生成绩管理系统源代码
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <dos.h>#include<ctype.h>#include<conio.h>#include<stddef.h>#include<time.h>#define PRINT1 textcolor(12); cprintf("\r 请按任意键返回主菜单\n\r");textcolor(10); getch();clrscr(); break;int shoudsave=0;struct student /* 学生信息结构体定义*/{char num[10],name[20],cla[4];int score1,score2,score3,total,ave;};typedef struct node{struct student data;struct node *next;}Node,*L;void print1(){cprintf("\r======================================================================= =========");}void print2(){cprintf("\n\r 1.输入学生成绩信息在这里你可以按照提示输入学生的班级,学号,姓名及各科成绩.\n");cprintf("\n\r 2.注销学生成绩信息在这里你可以按照学号或姓名将某名学生的信息从本系统中删除.\n");cprintf("\n\r 3.查询学生成绩信息在这里你可以按照学号或姓名查询某一名学生的信息.\n");cprintf("\n\r 4.修改学生成绩信息在这里你可以按照提示修改某一名学生的学号,姓名及各科成绩.");cprintf("\n\r 5.学生成绩信息排序在这里你可以看到所有学生的各科成绩.\n"); cprintf("\n\r 6.学生成绩信息统计在这里本系统将为你显示所有科目的最高分及最低分所得学生.\n");cprintf("\n\r 7.显示学生成绩信息在这里你可以看到系统中所有学生的信息.\n"); cprintf("\n\r 8.保存学生成绩信息在这里你可以将学生你信息保存到内存中.\n"); cprintf("\n\r 9.帮助学生成绩信息在这里你可以获得帮助信息.\n");cprintf("\n\r 0.退出系统在这里选择是否保存后,你可以安全的退出本系统.\n\n\r ");}void menu(){cprintf("\n\r\xc9\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xc d\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcb\xcd\xcd\xcd\xcd\ xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xc d\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xbb");cprintf("\r\xba 学生信息导入\xba 学生信息处理\xba");cprintf("\r\xba____________________________________\xba___________________________ _______________\xba");cprintf("\r\xba 1-->输入学生成绩信息\xba 6-->学生成绩信息统计\xba");cprintf("\r\xba 2-->注销学生成绩信息\xba 7-->显示学生成绩信息\xba");cprintf("\r\xba 3-->查询学生成绩信息\xba 8-->保存学生成绩信息\xba");cprintf("\r\xba 4-->修改学生成绩信息\xba 9-->帮助学生成绩信息\xba");cprintf("\r\xba 5-->学生成绩信息排序\xba 0-->退出系统\xba");cprintf("\r\xc8\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\ xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xca\xcd\xcd\xcd\xcd\xc d\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\ xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xbc");}void wrong(){cprintf("\n\r输入错误!请验证后重新输入.\n");}void notfind(){cprintf("\n\r该学生信息不存在!请验证后重新输入.\n");}void printc() /* 此函数用于输出中文格式*/{cprintf("\r学号姓名班级英语数学C语言总分平均分\n ");}void printe(Node *p) /* 此函数用于输出英文格式*/{cprintf("\r%-4s%-4s%4s%5d%5d%8d%5d%7d\n\r",p->data.num,p->,p->data.cla,p->dat a.score3,p->data.score2,p->data.score1,p->data.total,p->data.ave);}Node* Locate(L l,char findinfo[],char nameornum[]) /* 该函数用于定位连表中符合要求的接点,并返回该指针*/{Node *r;if(strcmp(nameornum,"num")==0)/* 按学号查询*/{r=l->next;while(r!=NULL){if(strcmp(r->data.num,findinfo)==0)return r;r=r->next;}}else if(strcmp(nameornum,"name")==0) /* 按姓名查询*/{r=l->next;while(r!=NULL){if(strcmp(r->,findinfo)==0)return r;r=r->next;}}return 0;}void input(L l) /* 增加学生*/{Node *p,*r,*s;char num[10];r=l;s=l->next;while(r->next!=NULL)r=r->next;/* 将指针置于最末尾*/while(1){ cprintf("\r如果输入完毕,请按任意键返回主菜单\n");cprintf("\r如果你还想输入,请按y(yes)继续\n\r");scanf("%s",num);if(strcmp(num,"y")==0){ cprintf("请你输入学号:");scanf("%s",num); } else break;while(s){if(strcmp(s->data.num,num)==0){printf("\t学号为'%s'的学生已经存在,若要修改请你选择'4 修改'!\n",num);print1();printc();printe(s);print1();printf("\n");getch();return;}s=s->next;}p=(Node *)malloc(sizeof(Node));strcpy(p->data.num,num);cprintf("\r请你输入姓名:");scanf("%s",p->);getchar();cprintf("\r请你输入班级:");scanf("%s",p->data.cla);getchar();cprintf("\r请你输入c语言成绩(0-100):");scanf("%d",&p->data.score1);getchar();cprintf("\r请你输入数学成绩(0-100):");scanf("%d",&p->data.score2);getchar();cprintf("\r请你输入英语成绩(0-100):");scanf("%d",&p->data.score3);getchar();p->data.total=p->data.score3+p->data.score1+p->data.score2;p->data.ave=p->data.total / 3; /* 信息输入已经完成*/p->next=NULL;r=p;shoudsave=1;}}void query(L l) /* 查询学生信息*/{int select;char findinfo[20];Node *p;if(!l->next){cprintf("\n 没有信息可以查询!\n");return;}cprintf("\n1==>按学号查找\n\r2==>按姓名查找\n\r");scanf("%d",&select);if(select==1) /* 学号*/{cprintf("\r请你输入要查找的学号:");scanf("%s",findinfo);p=Locate(l,findinfo,"num");if(p){cprintf(" 查找结果\n\r");print1();printc();printe(p);print1();}elsenotfind();}else if(select==2) /* 姓名*/{cprintf("\r请你输入要查找的姓名:");scanf("%s",findinfo);p=Locate(l,findinfo,"name");if(p){cprintf(" 查找结果\n\r");print1();printc();print1();}elsenotfind();}elsewrong();}void Delete(L l) /* 删除学生信息*/{int select;Node *p,*r;char findinfo[20];if(!l->next){cprintf("\n 没有信息可以删除!\n");return;}cprintf("\n1==>按学号删除\n\r2==>按姓名删除\n\r");scanf("%d",&select);if(select==1){cprintf("\r请你输入要删除的学号:");scanf("%s",findinfo);p=Locate(l,findinfo,"num");if(p){r=l;while(r->next!=p)r=r->next;r->next=p->next;free(p);cprintf("\n\r该学生已经成功删除!\n");shoudsave=1;}elsenotfind();}else if(select==2){cprintf("\r请你输入要删除的姓名:");scanf("%s",findinfo);p=Locate(l,findinfo,"name");if(p){r=l;while(r->next!=p)r=r->next;r->next=p->next;free(p);cprintf("\n\r该学生已经成功删除!\n");shoudsave=1;}elsenotfind();}else wrong();}void modify(L l) /*修改学生信息*/{Node *p;char findinfo[20];if(!l->next){cprintf("\n\r没有信息可以修改!\n");return;}cprintf("\r请你输入要修改的学生学号:");scanf("%s",findinfo);p=Locate(l,findinfo,"num");if(p){cprintf("\r请你输入新学号(原来是%s):",p->data.num);scanf("%s",p->data.num);cprintf("\r请你输入新姓名(原来是%s):",p->);scanf("%s",p->);getchar();cprintf("\r请你输入新班级(原来是%s):",p->data.cla);scanf("%s",p->data.cla);cprintf("\r请你输入新的c语言成绩(原来是%d分):",p->data.score1);scanf("%d",&p->data.score1);getchar();cprintf("\r请你输入新的数学成绩(原来是%d分):",p->data.score2);scanf("%d",&p->data.score2);getchar();cprintf("\r请你输入新的英语成绩(原来是%d分):",p->data.score3);scanf("%d",&p->data.score3);p->data.total=p->data.score3+p->data.score1+p->data.score2;p->data.ave=p->data.total/3;cprintf("\n\r信息修改成功!\n");shoudsave=1;}elsenotfind();}void display(L l){/*显示全部学生信息*/int count=0;Node *p;p=l->next;if(!p){cprintf("\n\r 没有信息可以显示!\n");return;}cprintf(" 显示结果");print1();printc();while(p){ if(count%5==0) getch();printe(p);p=p->next;count++;}print1();cprintf("\n");}void Statistic(L l) /*统计学生信息*/{Node *pm_max,*pe_max,*pc_max,*pt_max,*pa_max; /* 用于指向分数最高的接点*/ Node *pm_min,*pe_min,*pc_min,*pt_min,*pa_min;Node *r=l->next;if(!r){cprintf("\n\r 没有信息可以统计!\n");return ;}pm_max=pe_max=pc_max=pt_max=pa_max=pm_min=pe_min=pc_min=pt_min=pa_min=r; while(r!=NULL){if(r->data.score1>=pc_max->data.score1)pc_max=r;if(r->data.score1<=pc_min->data.score1)pc_min=r;if(r->data.score2>=pm_max->data.score2)pm_max=r;if(r->data.score2<=pm_min->data.score2)pm_min=r;if(r->data.score3>=pe_max->data.score3)pe_max=r;if(r->data.score3<=pe_min->data.score3)pe_min=r;if(r->data.total>=pt_max->data.total)pt_max=r;if(r->data.total<=pt_min->data.total)pt_min=r;if(r->data.ave>=pa_max->data.ave)pa_max=r;if(r->data.ave<=pa_min->data.ave)pa_min=r;r=r->next;}cprintf("====================================统计结果====================================\n");cprintf("\r总分最高者: %-16s %d分\n",pt_max->,pt_max->data.total); cprintf("\r平均分最高者: %-16s %d分\n",pa_max->,pa_max->data.ave); cprintf("\r英语最高者: %-16s %d分\n",pe_max->,pe_max->data.score3); cprintf("\r数学最高者: %-16s %d分\n",pm_max->,pm_max->data.score2); cprintf("\rc语言最高者: %-16s %d分\n\r",pc_max->,pc_max->data.score1); cprintf("\r总分最低者: %-16s %d分\n",pt_min->,pt_min->data.total); cprintf("\r平均分最低者: %-16s %d分\n",pa_min->,pa_min->data.ave); cprintf("\r英语最低者: %-16s %d分\n",pe_min->,pe_min->data.score3); cprintf("\r数学最低者: %-16s %d分\n",pm_min->,pm_min->data.score2); cprintf("\rc语言最低者: %-16s %d分\n\r",pc_min->,pc_min->data.score1); print1();}void Sort(L l){L ll;Node *p,*rr,*s;ll=(L)malloc(sizeof(Node)); /* 用于做新的连表*/ll->next=NULL;if(l->next==NULL){cprintf("\n\r 没有信息可以排序!\n");return ;}p=l->next;while(p){s=(Node*)malloc(sizeof(Node)); /* 新建接点用于保存信息*/s->data=p->data;s->next=NULL;rr=ll;while(rr->next!=NULL && rr->next->data.total>=p->data.total)rr=rr->next;if(rr->next==NULL)rr->next=s;else{s->next=rr->next;rr->next=s;}p=p->next;}free(l);l->next=ll->next;cprintf("\n\r 排序已经完成!\n");}void Save(L l) /* */{FILE* fp;Node *p;int flag=1,count=0;fp=fopen("c:\\student","wb");if(fp==NULL){cprintf("\n\r 重新打开文件时发生错误!\n");exit(1);}p=l->next;while(p){if(fwrite(p,sizeof(Node),1,fp)==1){p=p->next;count++;}else{flag=0;break;}}if(flag){cprintf("\n\r 文件保存成功.(有%d条信息已经保存.)\n\r",count);shoudsave=0;}fclose(fp);}void main() /* */{L l; /* 链表*/FILE *fp; /* 文件指针*/int count=0 ,i,menu_select; /*菜单选择*/char ch ,creat;Node *p,*r;time_t it;clrscr();textmode(C80);window(1,1,80,25);textbackground(1); clrscr();textcolor(10);printf("\r 学生成绩管理系统");printf("\r -------扬州大学信息工程学院软件0902班") ;printf("\r 设计人员:李天鹏");l=(Node*)malloc(sizeof(Node));l->next=NULL;r=l;fp=fopen("c:\\student","rb");if(fp==NULL){cprintf("\n\r 该文件还未存在,是否需要创建?(y/n,Y/N)\n\r");scanf("%c",&creat);if(creat=='y'||creat=='Y'){fp=fopen("c:\\student","wb");}elseexit(0);}gotoxy(9,11); textcolor(12);cprintf("\n\r 文件已经打开,系统正在导入信息");for(i=0;i<6;i++){ cprintf(".");sleep(1);}textcolor(10);gotoxy(9,11); cprintf("\n ");while(!feof(fp)){p=(Node*)malloc(sizeof(Node));if(fread(p,sizeof(Node),1,fp)) /* 将文件的内容放入接点中*/{p->next=NULL;r->next=p;r=p; /* 将该接点挂入连中*/count++;}}fclose(fp);/* 关闭文件*/gotoxy(1,3);cprintf("\n\r信息导入完毕,系统共导入%d条信息",count);sleep(1);while(1){ menu();textcolor(12);cprintf("\r现在时间: "); it=time(NULL);cprintf(ctime(&it));cprintf("\r左边数字对应功能选择,请按0--9选择操作:\n\r");textcolor(10) ;scanf("%d",&menu_select);if(menu_select==0){if(shoudsave==1){ getchar(); textcolor(128+12);cprintf("\n\r 信息已经改动,是否将改动保存到文件中(y/n Y/N)?\n\r"); scanf("%c",&ch);if(ch=='y'||ch=='Y')Save(l);}cprintf("\n\r 你已经成功退出学生成绩信息系统,欢迎下次继续使用!\n"); break;}switch(menu_select){case 1: clrscr(); input(l); clrscr(); break; /* 输入学生*/case 2: clrscr(); Delete(l); PRINT1 /* 删除学生*/case 3: clrscr(); query(l); PRINT1 /* 查询学生*/case 4: clrscr(); modify(l); PRINT1 /* 修改学生*/case 5: clrscr(); Sort(l); PRINT1case 6: clrscr(); Statistic(l); PRINT1case 7: clrscr(); display(l); PRINT1case 8: clrscr(); Save(l); PRINT1 /* 保存学生*/case 9: clrscr(); cprintf(" ==========帮助信息==========\n");print2(); PRINT1 ;default: wrong(); getchar(); break;}}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include #include #include
#define LIST_INIT_SIZE 4 //线性表存储空间的初始分配量 #define LISTINCREMENT 10 //线性表存储空间的分配增量
//学生的定义 typedef struct { int num; char name[20]; float english; float math; float database; float sum; float average; }Student;
//顺序表的定义 typedef struct {
Student *stu; int length; int listsize; }sqlist;
//函数1录入信息 int Input(sqlist *L) { int i=1;//为了查找、排序的方便将第一个当哨兵 char flag='y';
//输入数据 while(flag == 'Y' || flag == 'y') { for(i =1; i < L->listsize; ++i) { printf("请输入第%d个同学的信息:\n",L->length); printf("学号:"); fflush(stdin); scanf("%d",&L->stu[L->length].num); printf("姓名:"); fflush(stdin); scanf("%s",L->stu[L->length].name); printf("英语成绩:"); fflush(stdin); scanf("%f",&L->stu[L->length].english); printf("高数成绩:"); fflush(stdin); scanf("%f",&L->stu[L->length].math); printf("数据结构成绩:"); fflush(stdin); scanf("%f",&L->stu[L->length].database);
L->stu[L->length].sum=L->stu[L->length].english+L->stu[L->length].math+L->stu[L->length].database; L->stu[L->length].average=L->stu[L->length].sum/3; L->length++;
printf("是否继续[Y/N]... "); fflush(stdin); flag = getchar(); if(flag=='N'||flag=='n') break; } }
return 0; }
//函数2显示所有学生信息 int Display(sqlist *L) { int i; if(L->length<=1) { printf("请先输入数据!\n"); return 0; } printf("所有同学信息如下:\n"); printf("学号\t姓名\t总分\t平均分\t英语成绩\t高数成绩\t数据结构成绩\n"); for(i=1;ilength;i++)
printf("%d\t%s\t%.2f\t%.2f\t%.2f\t\t%.2f\t\t%.2f\n",L->stu[i].num,L->stu[i].name,L->stu[i].sum,L->stu[i].average,L->stu[i].english,L->stu[i].math,L->stu[i].database); return 0; }
//函数3插入一条记录到表尾 void Insert(sqlist *L) {
printf("学号:"); scanf("%d",&L->stu[L->length].num); printf("姓名:"); scanf("%s",L->stu[L->length].name); printf("英语成绩:"); scanf("%f",&L->stu[L->length].english); printf("高数成绩:"); scanf("%f",&L->stu[L->length].math); printf("数据结构成绩:"); scanf("%f",&L->stu[L->length].database); L->stu[L->length].sum=L->stu[L->length].english+L->stu[L->length].math+L->stu[L->length].database; L->stu[L->length].average=L->stu[L->length].sum/3; L->length++; }
//函数4删除一条记录 int Delete(sqlist *L) {
char s[20]; int i=1,j,ch,n;//第一个是哨兵 if(L->length<=1) { printf("请先输入数据!\n"); return 0; } printf("1.按姓名删除\n2.按学号删除\n请选择:"); scanf("%d",&ch); if(ch==1) { printf("请输入姓名:"); scanf("%s",s); while(strcmp(L->stu[i].name,s)!=0&&ilength) i++; } else { printf("请输入学号:"); scanf("%d",&n); while(L->stu[i].num!=n&&ilength) i++; } if(i>=L->length) { printf("要删除记录不存在!"); return 0; } for(j=i;jlength;j++) L->stu[j]=L->stu[j+1]; printf("删除成功!\n"); L->length--; return 0; }
//函数5统计成绩 int Statistic(sqlist *L) { int i,j=1,j1=1,j2=1,j3=1,k=1,k1=1,k2=1,k3=1;//要算及格率两个整数相除可能会是0所以float型 float aver,stusum=0,stusum1=0,stusum2=0,stusum3=0,count1=0,count2=0,count3=0; if(L->length<=1) { printf("请先输入数据!\n"); return 0; } for(i=1;ilength;i++) { //用于计算全班平均成绩 stusum+=L->stu[i].sum;
//用于计算各科平均成绩 stusum1+=L->stu[i].english; stusum2+=L->stu[i].math; stusum3+=L->stu[i].database; //查找总分最高分 if(L->stu[j].sumstu[i].sum) j=i;
//查找总分最低分 if(L->stu[k].sum>L->stu[i].sum) k=i;
//查找英语最高分 if(L->stu[j1].englishstu[i].english) j1=i;
//查找高数最高分 if(L->stu[j2].mathstu[i].math) j2=i;
//查找数据结构最高分 if(L->stu[j3].databasestu[i].database) j3=i;
//查找英语最低分 if(L->stu[k1].english>L->stu[i].english) k1=i;
//查找高数最低分 if(L->stu[k2].math>L->stu[i].math) k2=i;
//查找数据结构最低分 if(L->stu[k3].database>L->stu[i].database) k3=i;
//用于计算及格率 if(L->stu[i].english>=60) count1++; if(L->stu[i].math>=60) count2++; if(L->stu[i].database>=60) count3++; } aver=stusum/L->length; printf("共有%d条记录.\n",L->length); printf("总分最高的记录:\n"); printf("学号\t姓名\t总分\t平均分\t英语成绩\t高数成绩\t数据结构成绩\n");