C语言课程设计(成绩管理系统)

发布时间: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、可以将学生信息从文件中读取出来。

2 总体设计

1、 主函数 main()

利用if-else,While循环语句和switch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。

2、 菜单选择函数void menu();

这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的13大功能,根据每个功能前面的序号进行选择。等执行完每一个函数功能后,按任‘0’键回到主界面也要通过这个函数提示来实现!

3、 自定义函数 void printstart()void Wrong()void Nofind()void printc()void printe(Node *p)

void Wrong()来提示输入错误,用void Nofind()提示没有找到学生资料,用void printc()来输出中文,用void printe(Node *p)来输出中文。

main()

void Add(Link l) void Maths(Link l)

void Qur(Link l) void English(Link l)

void Del(Link l) void select(Link l)

void Modify(Link l) void Save(Link l)

void Disp(Link l) void menu()

void Tongji(Link l) void printc()

void Chinese(Link l) void printe(Node *p)

3 详细设计

3.1功能模块设计

3.1.1 排序数学成绩功能模块

函数void Maths(Link l)

该函数用于对数学成绩进行降序,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 显示学生资料功能模块

函数void Disp(Link l)

该函数负责显示学生资料,这是一个不返回值函数

算法:先将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)

3.2数据结构设计(可选)

一个结构体变量中可以存放一组数据(如一个学生的学号、姓名、成绩等数据)。一个结构体变量的指针就是该变量所占据的内存段起始地址。可以设一个指针变量,用来指向一结构体变量,此时指针变量的值是结构体的起始地址。指针量变也可以用来指向一结构体数组中的元素。

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;

6

经过一个多星期的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();

}

C语言课程设计(成绩管理系统)

相关推荐