C语言课程设计(成绩管理系统)
发布时间:2020-07-09 04:37:49
发布时间:2020-07-09 04:37:49
一、 课程设计的内容
(1) 信息维护:
要求:学生信息数据要以文件的形式保存,能实现学生信息数据的维护。此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息
(2) 信息查询:
要求:查询时可实现按姓名查询、按学号查询
(3) 成绩统计:
要求:A输入任意的一个课程名(如数学)和一个分数段(如60--70),统计出在此分数段的学生情况。
(4) 排序:能对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示排序结果(使用表格的形式显示排序后的输出结果)(使用多种方法排序者,加分)
(二)其它要求:
(1) 只能使用C/C++语言,源程序要有适当的注释,使程序容易阅读
(2) 至少采用文本菜单界面(如果能采用图形菜单界面更好)
(3) 学生可自动增加新功能模块(视情况可另外加分)
(4)写出课程设计报告,具体要求见相关说明文档
二、课程设计的要求与数据
1、进一步掌握和利用C语言进行程设计的能力;
2、进一步理解和运用结构化程序设计的思想和方法;
3、初步掌握开发一个小型实用系统的基本方法;
4、学会调试一个较长程序的基本方法;
5、学会利用流程图或N-S图表示算法;
6、掌握书写程序设计开发文档的能力。
三、课程设计应完成的工作
1、编写完成相应题目的程序;
2、编写课程设计报告,课程设计报告的内容应包括以下6个部分:
1) 需求分析:包括设计题目、设计要求以及系统功能需求分析;
2) 总体设计:包括系统总体设计框架和系统功能模块图;
3) 详细设计:包括主要功能模块的算法设计思路以及对应的工作流程图;
4) 调试分析过程描述:包括测试数据、测试输出结果,以及对程序调试过程中存在问题的思考(列出主要问题的出错现象、出错原因、解决方法及效果等,适当的包含结果截图);
5) 总结:课程设计完成了哪些功能,有没有什么扩展功能?还有哪些地方需要改进?课程设计过程中的学习体会与收获、对本次课程设计的认识以及自己的建议等内容;
6) 附录:主要源程序代码,含必要的注释。
3、答辩:在实验室建立程序运行的环境,并在指导教师的监督下,独立解
决问题、运行程序和回答教师提出的问题。
1 设计目的与要求………………………………………………………………P4
2 总体设计………………………………………………………………………P4
3 详细设计………………………………………………………………………P5
3.1功能模块设计………………………………………………………………P5
3.1.1 XX功能模块(可选) …………………………………………………P5
3.1.2 YY功能模块(可选) …………………………………………………P6
3.1.3 ZZ功能模块(可选)…………………………………………………P7
3.2数据结构设计……………………………………………………………P8
4调试分析 ……………………………………………………………………P9
4.1结构体……………………………………………………………………P9
4.2链表………………………………………………………………………P11
5遇到的问题及解决方法分析…………………………………………………P12
6 总结……………………………………………………………………………P13
7源文件…………………………………………………………………………P13
7.1链表………………………………………………………………………P13
7.2结构体……………………………………………………………………P28
1、目的与要求
一 目的:编制一程序实现对学生成绩的管理,让自己既动手又动脑,独立实践,将课本上的理论知识和实际应用问题进行有机结合,锻炼自己分析、解决实际问题的能力,提高自身项目开发及程序调试能力。
二 要求:
1、整个系统均用C语言实现;
2、利用指针、结构体、链表来实现学生成绩的数据结构设计;
3、系统具有输入、显示、查询(查询时可实现按姓名查询、按学号查询)、删除、排序、插入,保存、读取基本功能;
4、系统的各个功能模块都用函数的形式来实现;
5、学生信息数据要以文件的形式保存,能实现学生信息数据的维护。此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息;
6、可以输入任意的一个课程名(如数学)和一个分数段(如60--70),统计出在此分数段的学生情况;
7、能对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示排序结果;
8、可自动增加新功能模块;
9、可以将学生信息从文件中读取出来。
1、 主函数 main()
利用if-else,While循环语句和switch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。
2、 菜单选择函数void menu();
这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的13大功能,根据每个功能前面的序号进行选择。等执行完每一个函数功能后,按任‘0’键回到主界面也要通过这个函数提示来实现!
用void Wrong()来提示输入错误,用void Nofind()提示没有找到学生资料,用void printc()来输出中文,用void printe(Node *p)来输出中文。
3.1.1 排序数学成绩功能模块
该函数用于对数学成绩进行降序,ll=(Link)malloc(sizeof(Node))用于做新的链表连接,如果原链表为空的话,返回;不为空的话,p=l->next;建立接点用于保存信息,对指定链表地址进行排序。流程图如图所示:
Link ll ll=(Link)malloc(sizeof(Node)) 用于做新的连表 l->next==NULL 是 否 没有资料可以 p=l->next 排序 while(p) return s=(Node*)malloc(sizeof(Node)) rr=ll while(rr->next!=NULL&& rr->next->data.mgrade>=p->data.mgrade) 是 rr->next==NULL 否
rr->next=s s->next=rr->next; rr->next=s p=p->next l->next=ll->next (排序完成) |
3.1.2 显示学生资料功能模块
该函数负责显示学生资料,这是一个不返回值函数。
算法:先将p结点的指针指向第一个结点,将p结点(即第一个结点)的数据输出。然后再将p结点的指针指向p指针的的指针(即下一结点),将p结点(即第一结点)的数据输出。重复执行此步聚直到p指针指向NULL为止。流程图如图所示:
原来链表是否为空 是 否 |
提示没有 p指向下一结点p=p->next 资料可以 输出p指向的结点,即学生信息 显示 return p指向下一结点p=p->next |
3.1.3 删除资料功能模块
函数void Del(Link l)
该函数用于有选择地删除学生资料,如果原来的链表为空的话,会返回;不为空的话,选择用按哪种类型删除,如果按学号删除,就输入学号,后判断是否取得地址,取得就执行删除;按名字删除就输入名字,运行同学号一样。流程图如图所示:
原链表是否为空 是 否没有资料 1 按1学号还是2按名字? 2可以删除 输入你要删除的学号 输入你要删除的名字P是否取得输入地址 P是否取得输入地址是 否 否 是Return r指向下一 Nofind() Nofind () r指向下一结点 结点 执行free(p) 执行free(p) |
一个结构体变量中可以存放一组数据(如一个学生的学号、姓名、成绩等数据)。一个结构体变量的指针就是该变量所占据的内存段起始地址。可以设一个指针变量,用来指向一结构体变量,此时指针变量的值是结构体的起始地址。指针量变也可以用来指向一结构体数组中的元素。
struct student
{
char num[10];/* 学号 */
char name[20];
char sex[4];
int cgrade;
int mgrade;
int egrade;
int totle;
int ave;
char neartime[10];/* 最近更新时间 */
};
typedef struct node
{
struct student data;
struct node *next;
}Node,*Link;
经过一个多星期的C语言课程设计,感觉自己收获不少!
首先是:要达到这样的功能,使用链表相当方便,但不容易理解,所以在这方面我很了很多的时间看课本,使C语言的知识强化了不少。
其次,在做课程设计的过程中,发现了平时很多没有注意到的问题,例如:返回值函数和不返回值函数两者在主函数中的调用是不同的…………
更重要的是,这次课程设计虽然花了我不少时间,但正是这些时间,让我见识到了C语言的重要性。这个学生成绩管理系统都是在自己知识范围内完成的,所以界面清晰简单,可能不是很好看,但绝对实用!
从这里我也得到一个体会,做一个程序,或者开发一个软件,应该着重从它的后台制作入手,不能做出一个中看不中用的程序或者软件。
相信这次的课程设计使我的C语言知识扎实了很多。
由于这是第一次进行设计,写文档,难免会写得不好!
7 源程序
7. 1链表
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int shoudsave=0; /* */
struct student
{
char num[10];/* 学号 */
char name[20];
char sex[4];
int cgrade;
int mgrade;
int egrade;
int totle;
int ave;
char neartime[10];/* 最近更新时间 */
};
typedef struct node
{
struct student data;
struct node *next;
}Node,*Link;
void menu()
{
printf("********************************************************************************");
printf("\t1登记学生资料\t\t\t\t\t2删除学生资料\n");
printf("\t3查询学生资料\t\t\t\t\t4修改学生资料\n");
printf("\t5显示学生资料\t\t\t\t\t6统计学生资料\n");
printf("\t7排序语文成绩\t\t\t\t\t8排序数学成绩\n");
printf("\t9排序英语成绩\t\t\t\t\t10选出分段分数\n");
printf("\t11保存学生资料\t\t\t\t\t12帮助信息\t\t\n");
printf("\t0退出系统\t\t\t\t\t\t\t\n");
printf("********************************************************************************\n");
}
void printstart()
{
printf("-----------------------------------------------------------------------\n");
}
void Wrong()
{
printf("\n=====>提示:输入错误!\n");
}
void Nofind()
{
printf("\n=====>提示:没有找到该学生!\n");
}
void printc() /* 本函数用于输出中文 */
{
printf("学号\t 姓名\t 性别 语文成绩 数学成绩 英语成绩 总分 平均分\n");
}
void printe(Node *p)/* 本函数用于输出英文 */
{
printf("%-12s%s\t%s\t%d\t%d\t%d\t %d\t %d\n",p->data.num,p->data.name,p->data.sex,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.totle,p->data.ave);
}
Node* Locate(Link l,char findmess[],char nameornum[]) /* 该函数用于定位连表中符合要求的接点,并返回该指针 */
{
Node *r;
if(strcmp(nameornum,"num")==0) /* 按学号查询 */
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.num,findmess)==0)
return r;
r=r->next;
}
}
else if(strcmp(nameornum,"name")==0) /* 按姓名查询 */
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.name,findmess)==0)
return r;
r=r->next;
}
}
return 0;
}
void Add(Link l) /* 增加学生 */
{
Node *p,*r,*s;
char num[10];
r=l;
s=l->next;
while(r->next!=NULL)
r=r->next; /* 将指针置于最末尾 */
while(1)
{
printf("请你输入学号(以'0'返回上一级菜单:)");
scanf("%s",num);
if(strcmp(num,"0")==0)
break;
while(s)
{
if(strcmp(s->data.num,num)==0)
{
printf("=====>提示:学号为'%s'的学生已经存在,若要修改请你选择'4 修改'!\n",num);
printstart();
printc();
printe(s);
printstart();
printf("\n");
return;
}
s=s->next;
}
p=(Node *)malloc(sizeof(Node));
strcpy(p->data.num,num);
printf("请你输入姓名:");
scanf("%s",p->data.name);
getchar();
printf("请你输入性别:");
scanf("%s",p->data.sex);
getchar();
printf("请你输入语文成绩:");
scanf("%d",&p->data.cgrade);
getchar();
printf("请你输入数学成绩:");
scanf("%d",&p->data.mgrade);
getchar();
printf("请你输入英语成绩:");
scanf("%d",&p->data.egrade);
getchar();
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle / 3;
/* 信息输入已经完成 */
p->next=NULL;
r->next=p;
r=p;
shoudsave=1;
}
}
void Qur(Link l) /* 查询学生 */
{
int sel;
char findmess[20];
Node *p;
if(!l->next)
{
printf("\n=====>提示:没有资料可以查询!\n");
return;
}
printf("\n=====>1按学号查找\n=====>2按姓名查找\n");
scanf("%d",&sel);
if(sel==1)/* 学号 */
{
printf("请你输入要查找的学号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("\t\t\t\t查找结果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else if(sel==2) /* 姓名 */
{
printf("请你输入要查找的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
printf("\t\t\t\t查找结果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else
Wrong();
}
void Del(Link l) /* 删除 */
{
int sel;
Node *p,*r;
char findmess[20];
if(!l->next)
{
printf("\n=====>提示:没有资料可以删除!\n");
return;
}
printf("\n=====>1按学号删除\n=====>2按姓名删除\n");
scanf("%d",&sel);
if(sel==1)
{
printf("请你输入要删除的学号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:该学生已经成功删除!\n");
shoudsave=1;
}
else
Nofind();
}
else if(sel==2)
{
printf("请你输入要删除的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:该学生已经成功删除!\n");
shoudsave=1;
}
else
Nofind();
}
else
Wrong();
}
void Modify(Link l)
{
Node *p;
char findmess[20];
if(!l->next)
{
printf("\n=====>提示:没有资料可以修改!\n");
return;
}
printf("请你输入要修改的学生学号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("请你输入新学号(原来是%s):",p->data.num);
scanf("%s",p->data.num);
printf("请你输入新姓名(原来是%s):",p->data.name);
scanf("%s",p->data.name);
getchar();
printf("请你输入新性别(原来是%s):",p->data.sex);
scanf("%s",p->data.sex);
printf("请你输入新的语文成绩(原来是%d分):",p->data.cgrade);
scanf("%d",&p->data.cgrade);
getchar();
printf("请你输入新的数学成绩(原来是%d分):",p->data.mgrade);
scanf("%d",&p->data.mgrade);
getchar();
printf("请你输入新的英语成绩(原来是%d分):",p->data.egrade);
scanf("%d",&p->data.egrade);
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle/3;
printf("\n=====>提示:资料修改成功!\n");
shoudsave=1;
}
else
Nofind();
}
void Disp(Link l)
{
int count=0;
Node *p;
p=l->next;
if(!p)
{
printf("\n=====>提示:没有资料可以显示!\n");
return;
}
printf("\t\t\t\t显示结果\n");
printstart();
printc();
printf("\n");
while(p)
{
printe(p);
p=p->next;
}
printstart();
printf("\n");
}
void Tongji(Link l)
{
Node *pm,*pe,*pc,*pt,*pa; /* 用于指向分数最高的接点 */
Node *r=l->next;
if(!r)
{
printf("\n=====>提示:没有资料可以统计!\n");
return ;
}
pm=pe=pc=pt=pa=r;
while(r!=NULL)
{
if(r->data.cgrade>=pc->data.cgrade)
pc=r;
if(r->data.mgrade>=pm->data.mgrade)
pm=r;
if(r->data.egrade>=pe->data.egrade)
pe=r;
if(r->data.totle>=pt->data.totle)
pt=r;
if(r->data.ave>=pa->data.ave)
pa=r;
r=r->next;
}
printf("------------------------------统计结果--------------------------------\n");
printf("总分最高者:\t%s %d分\n",pt->data.name,pt->data.totle);
printf("平均分最高者:\t%s %d分\n",pa->data.name,pa->data.ave);
printf("英语最高者:\t%s %d分\n",pe->data.name,pe->data.egrade);
printf("数学最高者:\t%s %d分\n",pm->data.name,pm->data.mgrade);
printf("语文最高者:\t%s %d分\n",pc->data.name,pc->data.cgrade);
printstart();
}
void Chinese(Link l)
{
Link ll;
Node *p,*rr,*s;
ll=(Link)malloc(sizeof(Node)); /* 用于做新的连表 */
ll->next=NULL;
if(l->next==NULL)
{
printf("\n=====>提示:没有资料可以排序!\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.egrade>=p->data.egrade)
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;
printf("\n=====>提示:排序已经完成!\n");
}
void Maths(Link l) /*对数学排序*/
{
Link ll;
Node *p,*rr,*s;
ll=(Link)malloc(sizeof(Node)); /* 用于做新的连表 */
ll->next=NULL;
if(l->next==NULL)
{
printf("\n=====>提示:没有资料可以排序!\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.mgrade>=p->data.mgrade)
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;
printf("\n=====>提示:排序已经完成!\n");
}
void English(Link l) /*对英语排序*/
{
Link ll;
Node *p,*rr,*s;
ll=(Link)malloc(sizeof(Node)); /* 用于做新的连表 */
ll->next=NULL;
if(l->next==NULL)
{
printf("\n=====>提示:没有资料可以排序!\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.cgrade>=p->data.cgrade)
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;
printf("\n=====>提示:排序已经完成!\n");
}
void select(Link l)
{
int i;
int j,k;
Node *pc = l; //用于指向分数最高的接点
Node *r=l->next;
if(!r)
{
printf("\n=====>提示:没有资料可以筛选!\n");
return ;
}
printf("输入课程名1.语文2.数学3.英语");
scanf("%d",&i);
if(i==1)
{
printf("请输入筛选分数的上限:");
scanf("%d",&j);
printf("请输入筛选分数的下限:");
scanf("%d",&k);
printf("------------------------------筛选结果-----------------------------------------------------------\n");
printf("学号\t 姓名\t 性别 语文成绩 数学成绩 英语成绩 总分 平均分\n");
printstart();
while(r!=NULL)
{
if(k<=(r->data.egrade)&&(r->data.egrade)
printe(r);
r=r->next;
}
}
else if(i==2)
{
printf("请输入筛选分数的上限:");
scanf("%d",&j);
printf("请输入筛选分数的下限:");
scanf("%d",&k);
printf("------------------------------筛选结果-----------------------------------------------------------\n");
printf("学号\t 姓名\t 性别 语文成绩 数学成绩 英语成绩 总分 平均分\n");
printstart();
while(r!=NULL)
{
if(k<=(r->data.mgrade)&&(r->data.mgrade)
printe(r);
r=r->next;
}
}
else if(i==3)
{
printf("请输入筛选分数的上限:");
scanf("%d",&j);
printf("请输入筛选分数的下限:");
scanf("%d",&k);
printf("------------------------------筛选结果-----------------------------------------------------------\n");
printf("学号\t 姓名\t 性别 语文成绩 数学成绩 英语成绩 总分 平均分\n");
printstart();
while(r!=NULL)
{
if(k<=(r->data.cgrade)&&(r->data.cgrade)
printe(r);
r=r->next;
}
}
else
Wrong();
}
void Save(Link l)
{
FILE* fp;
Node *p;
int flag=1,count=0;
fp=fopen("c:\\student","wb");
if(fp==NULL)
{
printf("\n=====>提示:重新打开文件时发生错误!\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)
{
printf("\n=====>提示:文件保存成功.(有%d条记录已经保存.)\n",count);
shoudsave=0;
}
fclose(fp);
}
void main()
{
Link l;/* 连表 */
FILE *fp; /* 文件指针 */
int sel;
char ch;
char jian;
int count=0;
Node *p,*r;
printf("\t\t\t\t学生成绩管理系统\n \t\t\t 06自动化2班 蔡晓庆 3106000849\t\t\t\t\n");
l=(Node*)malloc(sizeof(Node));
l->next=NULL;
r=l;
fp=fopen("C:\\student","wb");
loop:menu();
printf("请你选择操作:");
scanf("%d",&sel);
if(sel==0)
{
if(shoudsave==1)
{ getchar();
printf("\n=====>提示:资料已经改动,是否将改动保存到文件中(y/n)?\n");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save(l);
}
printf("\n=====>提示:你已经退出系统,再见!\n");
return;
}
switch(sel)
{
case 1:Add(l);goto loop;break; /* 增加学生 */
case 2:Del(l);goto loop;break;/* 删除学生 */
case 3:Qur(l);goto loop;break;/* 查询学生 */
case 4:Modify(l);goto loop;break;/* 修改学生 */
case 5:Disp(l);goto loop;break;/*显示学生*/
case 6:Tongji(l);goto loop;break;/*统计学生*/
case 7:Chinese(l);goto loop;break;/*语文排序*/
case 8:Maths(l);goto loop;break;/*数学排序*/
case 9:English(l);goto loop;break;/*英语排序*/
case 10:select(l);goto loop;break;/* 选择分段分数 */
case 11:Save(l);goto loop;break;/* 保存学生 */
case 12:printf("\t\t\t==========帮助信息==========\n");goto loop;break;
default: Wrong();getchar();break;
}
}
7. 2结构体
#include
#include
#include
struct student
{
char class_0[20];
char num [20];
char name[20];
float math;
float c_prog;
float eng;
float polity;
float sport;
float ave;}stu[1000];
char j,h;
/*函数声明*/
void luru();
void chaxun();
void charu();
void tongji();
void xiugai();
void shanchu();
void paixu();
void tuichu();
FILE *fp;//指向学生信息的文件指针
void main()
{
loop:
printf("\t\t***********************************************\t\t\n");
printf("\t\t 欢迎使用学生信息管理系统 \t\t\n");
printf("\t\t \t\t\n");
printf("\t\t 制作人:电力4 史素芬 \t\t\n");
printf("\t\t \t\t\n");
printf("\t\t \t\t\n");
printf("\t\t***********************************************\t\t\n");
printf("\t\t1. 录入学生成绩 \n");
printf("\t\t2. 排序学生成绩 \n");
printf("\t\t3. 统计输出成绩 \n");
printf("\t\t4. 查询学生成绩 \n");
printf("\t\t5. 插入学生成绩 \n");
printf("\t\t6. 修改学生成绩 \n");
printf("\t\t7. 删除学生成绩 \n");
printf("\t\t8. 退出管理系统 \n");
int n;
printf("请选择功能\n\n");
scanf("%d",&n);
system("cls");
switch(n)
{
case 1:
printf("\t\t录入学生成绩\n\n");
luru();
goto loop;
case 2:
printf("\t\t排序学生成绩\n\n");
paixu();
goto loop;
case 3:
printf("\t\t统计输出学生成绩\n\n");
tongji();
goto loop;
case 4:
printf("\t\t查询学生成绩\n\n");
chaxun();
goto loop;
case 5:
printf("\t\t插入学生成绩\n\n");
charu();
goto loop;
case 6:
printf("\t\t修改学生成绩\n\n");
xiugai();
goto loop;
case 7:
printf("\t\t删除学生成绩\n\n");
shanchu();
goto loop;
case 8:
printf("\t\t程序退出。\t谢谢使用!\n\n");
exit(0);
default:
printf("您的输入有误,请重试!\n\n");
fflush(stdin);
goto loop;
}
printf("\n按任意键返回......");
}
void luru()
{
int i,m;
FILE*fp;
printf("请输入学生人数: ");
scanf("%d",&m);
if(m>1000||m<0){printf("\n错误\n\n");return;}
else
for(i=0;i
{printf("\n请输入第%d位学生的成绩:\n",i+1);
printf("班级:");
scanf("%s",stu[i].class_0);
printf("学号:");
scanf("%s",stu[i].num);
printf("姓名:");
scanf("%s",stu[i].name);
printf("高等数学成绩:");
scanf("%f",&stu[i].math);
printf("C程序设计成绩:");
scanf("%f",&stu[i].c_prog);
printf("大学英语成绩:");
scanf("%f",&stu[i].eng);
printf("马克思主义政治经济学成绩:");
scanf("%f",&stu[i].polity);
printf("大学体育成绩:");
scanf("%f",&stu[i].sport);
stu[i].ave=(stu[i].c_prog+stu[i].eng+stu[i].math+stu[i].polity+stu
[i].sport)/5;
}
fp=fopen("stud.c","w");
for(i=0;i
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
printf("\n打开文件失败\n\n\n");
fclose(fp);
fp=fopen("stud.c","r");
printf("\n已录入的学生成绩:\n");
printf("\n班级 学号 姓名 高等数学 C程序设计 大学英语 马克思主义经济学 大学体育 平均分\n");
for(i=0;i
{fread(&stu[i],sizeof(struct student),1,fp);
printf("\n%-6s%-6s%-6s%-9.2f%-10.2f%-9.2f%-17.2f%-9.2f%-6.2f\n",stu[i].class_0,
stu[i].num,stu[i].name,stu[i].math,stu[i].c_prog,stu[i].eng,
stu[i].polity,stu[i].sport,stu[i].ave);
}
fclose(fp);
getchar();
}
void paixu()
{
loop:
printf("\t=================1,平均成绩排序=================\n");
printf("\t=================2,高数成绩排序=================\n");
printf("\t=================3,C语言成绩排序================\n");
printf("\t=================4,英语成绩排序=================\n");
printf("\t=================5,马克思经济学成绩排序=========\n");
printf("\t=================6,大学体育成绩排序=============\n");
printf("\t=================7,学号排序=====================\n");
printf("请输入你的选择\n");
int t;
scanf("%d",&t);
if(t=1)
{
FILE*fp;int x,y,z;struct student temp;
if((fp=fopen("stud.c","r"))==NULL)
{printf("\n无法打开文件\n\n\n");return;}
for(x=0;fread(&stu[x],sizeof(struct student),1,fp)!=0;x++)
{
}
printf("\n");
fclose(fp);
z=x;
for(x=0;x
for(y=x+1;y
if(stu[x].ave
{temp=stu[x];
stu[x]=stu[y];
stu[y]=temp;
}
printf("\n排序后的数据:\n");
printf("\n班级 学号 姓名 高等数学 C程序设计 大学英语 马克思主义经济学 大学体育 平均分\n");
fp=fopen("stud.c","w");
for(x=0;x
{fwrite(&stu[x],sizeof(struct student),1,fp);
printf("\n%-6s%-6s%-6s%-9.2f%-10.2f%-9.2f%-17.2f%-9.2f%-6.2f\n",stu[x].class_0,
stu[x].num,stu[x].name,stu[x].math,stu[x].c_prog,stu[x].eng,
stu[x].polity,stu[x].sport,stu[x].ave);
}
printf("\n");getchar();
fclose(fp);
return;
}
else if(t=2)
{
FILE*fp;int x,y,z;struct student gaoshu;
if((fp=fopen("stud.c","r"))==NULL)
{printf("\n无法打开文件\n\n\n");return;}
for(x=0;fread(&stu[x],sizeof(struct student),1,fp)!=0;x++)
{
}
printf("\n");
fclose(fp);
z=x;
for(x=0;x
for(y=x+1;y
if(stu[x].math
{gaoshu=stu[x];
stu[x]=stu[y];
stu[y]=gaoshu;
}
printf("\n排序后的数据:\n");
printf("\n班级 学号 姓名 高等数学 \n");
fp=fopen("stud.c","w");
for(x=0;x
{fwrite(&stu[x],sizeof(struct student),1,fp);
printf("\n%-6s%-6s%-6s%-9.2f\n",stu[x].class_0,
stu[x].num,stu[x].name,stu[x].math);
}
printf("\n");getchar();
fclose(fp);
return;
}
else if(t=3)
{
FILE*fp;int x,y,z;struct student yuyan;
if((fp=fopen("stud.c","r"))==NULL)
{printf("\n无法打开文件\n\n\n");return;}
for(x=0;fread(&stu[x],sizeof(struct student),1,fp)!=0;x++)
{
}
printf("\n");
fclose(fp);
z=x;
for(x=0;x
for(y=x+1;y
if(stu[x].c_prog
{yuyan=stu[x];
stu[x]=stu[y];
stu[y]=yuyan;
}
printf("\n排序后的数据:\n");
printf("\n班级 学号 姓名 C语言 \n");
fp=fopen("stud.c","w");
for(x=0;x
{fwrite(&stu[x],sizeof(struct student),1,fp);
printf("\n%-6s%-6s%-6s%-9.2f\n",stu[x].class_0,
stu[x].num,stu[x].name,stu[x].c_prog);
}
printf("\n");getchar();
fclose(fp);
return;
}
else if(t=4)
{
FILE*fp;int x,y,z;struct student ying;
if((fp=fopen("stud.c","r"))==NULL)
{printf("\n无法打开文件\n\n\n");return;}
for(x=0;fread(&stu[x],sizeof(struct student),1,fp)!=0;x++)
{
}
printf("\n");
fclose(fp);
z=x;
for(x=0;x
for(y=x+1;y
if(stu[x].eng
{ying=stu[x];
stu[x]=stu[y];
stu[y]=ying;
}
printf("\n排序后的数据:\n");
printf("\n班级 学号 姓名 英语\n");
fp=fopen("stud.c","w");
for(x=0;x
{fwrite(&stu[x],sizeof(struct student),1,fp);
printf("\n%-6s%-6s%-6s%-9.2f\n",stu[x].class_0,
stu[x].num,stu[x].name,stu[x].eng);
}
printf("\n");getchar();
fclose(fp);
return;
}
else if(t=5)
{
FILE*fp;int x,y,z;struct student makesi;
if((fp=fopen("stud.c","r"))==NULL)
{printf("\n无法打开文件\n\n\n");return;}
for(x=0;fread(&stu[x],sizeof(struct student),1,fp)!=0;x++)
{
}
printf("\n");
fclose(fp);
z=x;
for(x=0;x
for(y=x+1;y
if(stu[x].polity
{makesi=stu[x];
stu[x]=stu[y];
stu[y]=makesi;
}
printf("\n排序后的数据:\n");
printf("\n班级 学号 姓名 马克思经济学 \n");
fp=fopen("stud.c","w");
for(x=0;x
{fwrite(&stu[x],sizeof(struct student),1,fp);
printf("\n%-6s%-6s%-6s%-9.2f\n",stu[x].class_0,
stu[x].num,stu[x].name,stu[x].polity);
}
printf("\n");getchar();
fclose(fp);
return;
}
else if(t=6)
{
FILE*fp;int x,y,z;struct student tiyu;
if((fp=fopen("stud.c","r"))==NULL)
{printf("\n无法打开文件\n\n\n");return;}
for(x=0;fread(&stu[x],sizeof(struct student),1,fp)!=0;x++)
{
}
printf("\n");
fclose(fp);
z=x;
for(x=0;x
for(y=x+1;y
if(stu[x].sport
{tiyu=stu[x];
stu[x]=stu[y];
stu[y]=tiyu;
}
printf("\n排序后的数据:\n");
printf("\n班级 学号 姓名 大学体育 \n");
fp=fopen("stud.c","w");
for(x=0;x
{fwrite(&stu[x],sizeof(struct student),1,fp);
printf("\n%-6s%-6s%-6s%-9.2f\n",stu[x].class_0,
stu[x].num,stu[x].name,stu[x].sport);
}
printf("\n");getchar();
fclose(fp);
return;
}
else
{
FILE*fp;int x,y,z;struct student xuehao;
if((fp=fopen("stud.c","r"))==NULL)
{printf("\n无法打开文件\n\n\n");return;}
for(x=0;fread(&stu[x],sizeof(struct student),1,fp)!=0;x++)
{
}
printf("\n");
fclose(fp);
z=x;
for(x=0;x
for(y=x+1;y
if(stu[x].num
{xuehao=stu[x];
stu[x]=stu[y];
stu[y]=xuehao;
}
printf("\n排序后的数据:\n");
printf("\n班级 学号 姓名 高等数学 C程序设计 大学英语 马克思主义经济学 大学体育 平均分\n");
fp=fopen("stud.c","w");
for(x=0;x
{fwrite(&stu[x],sizeof(struct student),1,fp);
printf("\n%-6s%-6s%-6s%-9.2f%-10.2f%-9.2f%-17.2f%-9.2f%-6.2f\n",stu[x].class_0,
stu[x].num,stu[x].name,stu[x].math,stu[x].c_prog,stu[x].eng,
stu[x].polity,stu[x].sport,stu[x].ave);
}
printf("\n");getchar();
fclose(fp);
return;
}
}
void tongji()
{
FILE *fp;
int i,d,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;
if((fp=fopen("stud.c","rb"))==NULL)
{
printf("文件打开失败.\n");
exit(1);
}
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)!=0;i++)
{};
d=i;
rewind(fp);
for(i=0;i
{
if (0<=stu[i].ave&&stu[i].ave<10) j=j+1;
else if(10<=stu[i].ave&&stu[i].ave<20) k=k+1;
else if(20<=stu[i].ave&&stu[i].ave<30) l=l+1;
else if(30<=stu[i].ave&&stu[i].ave<40) m=m+1;
else if(40<=stu[i].ave&&stu[i].ave<50) n=n+1;
else if(50<=stu[i].ave&&stu[i].ave<60) o=o+1;
else if(60<=stu[i].ave&&stu[i].ave<70) p=p+1;
else if(70<=stu[i].ave&&stu[i].ave<80) q=q+1;
else if(80<=stu[i].ave&&stu[i].ave<90) r=r+1;
else if(90<=stu[i].ave&&stu[i].ave<100) s=s+1;
}
printf("0-10:");
printf("\t%d\n",j);
printf("10-20:");
printf("\t%d\n",k);
printf("20-30:");
printf("\t%d\n",l);
printf("30-40:");
printf("\t%d\n",m);
printf("40-50:");
printf("\t%d\n",n);
printf("50-60:");
printf("\t%d\n",o);
printf("60-70:");
printf("\t%d\n",p);
printf("70-80:");
printf("\t%d\n",q);
printf("80-90:");
printf("\t%d\n",r);
printf("90-100:");
printf("\t%d\n",s);
fclose(fp); getchar();return;
}
void chaxun()
{
int g1,k1,a1;FILE*fp;char num1[10];
if((fp=fopen("stud.c","rb"))==NULL)
{printf("\n无法打开文件\n\n\n");return;}
for(g1=0;fread(&stu[g1],sizeof(struct student),1,fp)!=0;g1++)
{
};
fclose(fp);
k1=g1;
printf("\n请输入要查询的学生学号:\n");
scanf("%s",num1);
for(a1=1,g1=0;a1&&g1
{if(strcmp(num1,stu[g1].num)==0)
a1=0;
}
if(!a1)
{printf("\n你要查询的学生成绩:\n");
printf("\n班级 学号 姓名 高等数学 C程序设计 大学英语 马克思主义经济学 大学体育 平均分\n");
printf("\n%-6s%-6s%-6s%-9.2f%-10.2f%-9.2f%-17.2f%-9.2f%-6.2f\n",stu[g1-1].class_0,
stu[g1-1].num,stu[g1-1].name,stu[g1-1].math,stu[g1-1].c_prog,stu
[g1-1].eng,
stu[g1-1].polity,stu[g1-1].sport,stu[g1-1].ave);
}
else
{printf("\n没有你要查询的学生成绩:\n\n\n");return;}
fclose(fp); getchar();
}
void charu()
{
FILE*fp;int i,e,n;struct student s;
printf("请输入需要插入的学生数据\n");
printf("班级:");
scanf("%s",s.class_0);
printf("学号:");
scanf("%s",s.num);
printf("姓名:");
scanf("%s",s.name);
printf("高等数学成绩:");
scanf("%f",&s.math);
printf("C程序设计成绩:");
scanf("%f",&s.c_prog);
printf("大学英语成绩:");
scanf("%f",&s.eng);
printf("马克思主义政治经济学成绩:");
scanf("%f",&s.polity);
printf("大学体育成绩:");
scanf("%f",&s.sport);
s.ave=(s.c_prog+s.eng+s.math+s.polity+s.sport)/5;
if((fp=fopen("stud.c","r"))==NULL)
{printf("\n无法打开文件\n\n\n");return;}
for(e=0;fread(&stu[e],sizeof(struct student),1,fp)!=0;e++)
{};n=e;
printf("\n插入后的学生成绩:\n");fp=fopen("stud.c","w");
fwrite(&s,sizeof(struct student),1,fp);
printf("\n班级 学号 姓名 高等数学 C程序设计 大学英语 马克思主义经济学 大学体育 平均分\n");
printf("\n%-6s%-6s%-6s%-9.2f%-10.2f%-9.2f%-17.2f%-9.2f%-6.2f\n",s.class_0,
s.num,s.name,s.math,s.c_prog,s.eng,s.polity,s.sport,s.ave);
for(e=0;e
{
fwrite(&stu[e],sizeof(struct student),1,fp);
printf("\n%-6s%-6s%-6s%-9.2f%-10.2f%-9.2f%-17.2f%-9.2f%-6.2f\n",stu
[e].class_0,
stu[e].num,stu[e].name,stu[e].math,stu[e].c_prog,stu[e].eng,
stu[e].polity,stu[e].sport,stu[e].ave);
}
fclose(fp); getchar();
}
void xiugai()
{
int g2,k2,a2;FILE*fp;struct student s1;
char num[10];
if((fp=fopen("stud.c","rb"))==NULL)
{printf("\n无法打开文件\n\n\n");return;}
printf("\n学生成绩列表:\n");
printf("\n班级 学号 姓名 高等数学 C程序设计 大学英语 马克思主义经济学 大学体育 平均分\n");
for(g2=0;fread(&stu[g2],sizeof(struct student),1,fp)!=0;g2++)
{printf("\n%-6s%-6s%-6s%-9.2f%-10.2f%-9.2f%-17.2f%-9.2f%-6.2f\n",stu[g2].class_0,
stu[g2].num,stu[g2].name,stu[g2].math,stu[g2].c_prog,stu[g2].eng,
stu[g2].polity,stu[g2].sport,stu[g2].ave);
};
fclose(fp);
k2=g2;
printf("\n请输入要修改的学生学号:\n");
scanf("%s",num);
printf("\n请重新输入学生信息:\n");
printf("班级:");
scanf("%s",s1.class_0);
printf("学号:");
scanf("%s",s1.num);
printf("姓名:");
scanf("%s",s1.name);
printf("高等数学成绩:");
scanf("%f",&s1.math);
printf("C程序设计成绩:");
scanf("%f",&s1.c_prog);
printf("大学英语成绩:");
scanf("%f",&s1.eng);
printf("马克思主义政治经济学成绩:");
scanf("%f",&s1.polity);
printf("大学体育成绩:");
scanf("%f",&s1.sport);
s1.ave=(s1.c_prog+s1.eng+s1.math+s1.polity+s1.sport)/5;
for(a2=1,g2=0;a2&&g2
if(strcmp(num,stu[g2].num)==0)
{strcpy(stu[g2].class_0,s1.class_0);
strcpy(stu[g2].num,s1.num);
strcpy(stu[g2].name,s1.name);
stu[g2].math=s1.math;stu[g2].c_prog=s1.c_prog;
stu[g2].eng=s1.eng;stu[g2].polity=s1.polity;
stu[g2].sport=s1.sport;stu[g2].ave=s1.ave;
a2=0;
}
if(a2)
{printf("\n没有你要修改的学生成绩:\n\n\n");return;}
else
{printf("\n修改后学生成绩列表:\n");
printf("\n班级 学号 姓名 高等数学 C程序设计 大学英语 马克思主义经济学 大学体育 平均分\n");
if((fp=fopen("stud.c","wb"))==NULL)
{printf("\n无法打开文件\n\n\n");return;}
for(g2=0;g2
fwrite(&stu[g2],sizeof(struct student),1,fp);
fclose(fp);
fp=fopen("stud.c","r");
for(g2=0;fread(&stu[g2],sizeof(struct student),1,fp)!=0;g2++)
{printf("\n%-6s%-6s%-6s%-9.2f%-10.2f%-9.2f%-17.2f%-9.2f%-6.2f\n",stu[g2].class_0,
stu[g2].num,stu[g2].name,stu[g2].math,stu[g2].c_prog,stu[g2].eng,
stu[g2].polity,stu[g2].sport,stu[g2].ave);
}printf("\n");fclose(fp); getchar();
};
}
void shanchu()
{
int g,w,k,a;FILE*fp;char num[10];
if((fp=fopen("stud.c","rb"))==NULL)
{printf("\n无法打开文件\n\n\n");return;}
printf("\n学生成绩列表:\n");
printf("\n班级 学号 姓名 高等数学 C程序设计 大学英语 马克思主义经济学 大学体育 平均分\n");
for(g=0;fread(&stu[g],sizeof(struct student),1,fp)!=0;g++)
{printf("\n%-6s%-6s%-6s%-9.2f%-10.2f%-9.2f%-17.2f%-9.2f%-6.2f\n",stu[g].class_0,
stu[g].num,stu[g].name,stu[g].math,stu[g].c_prog,stu[g].eng,
stu[g].polity,stu[g].sport,stu[g].ave);
};
fclose(fp);
k=g;
printf("\n请输入要删除的学生学号:\n");
scanf("%s",num);
for(a=1,g=0;a&&g
{if(strcmp(num,stu[g].num)==0)
{for(w=g;w
{strcpy(stu[w].num,stu[w+1].num);
strcpy(stu[w].class_0,stu[w+1].class_0);
strcpy(stu[w].name,stu[w+1].name);
stu[w].math=stu[w+1].math;stu[w].c_prog=stu[w+1].c_prog;
stu[w].eng=stu[w+1].eng;stu[w].polity=stu[w+1].polity;
stu[w].sport=stu[w+1].sport;stu[w].ave=stu[w+1].ave;
}
a=0;
}
}
if(!a)
k=k-1;
else
{printf("\n没有你要删除的学生成绩:\n\n\n");return;}
printf("\n删除后学生成绩列表:\n");
printf("\n班级 学号 姓名 高等数学 C程序设计 大学英语 马克思主义经济学 大学体育 平均分\n");
if((fp=fopen("stud.c","wb"))==NULL)
{printf("\n无法打开文件\n\n\n");return;}
for(g=0;g
fwrite(&stu[g],sizeof(struct student),1,fp);
fclose(fp);
fp=fopen("stud.c","r");
for(g=0;fread(&stu[g],sizeof(struct student),1,fp)!=0;g++)
{printf("\n%-6s%-6s%-6s%-9.2f%-10.2f%-9.2f%-17.2f%-9.2f%-6.2f\n",stu[g].class_0,
stu[g].num,stu[g].name,stu[g].math,stu[g].c_prog,stu[g].eng,
stu[g].polity,stu[g].sport,stu[g].ave);
}printf("\n");
fclose(fp); getchar();
}