c语言课程设计学生成绩管理系统_第1页
c语言课程设计学生成绩管理系统_第2页
c语言课程设计学生成绩管理系统_第3页
c语言课程设计学生成绩管理系统_第4页
c语言课程设计学生成绩管理系统_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

信息技术工程学院

C语言课程设计报告

题目:学生成绩管理系统(ac丘ie①ement

managementsystem)

目录

一设计目的..................................................

二课程设计的内容............................................

三课程设计的要求与数据......................................

四课程设计应完成的工作......................................

五总体设计(包含包大功能模块).............................

六详细设计..................................................

6.1各个模块的功能和实现.....................................

6.2流程图....................................................

(管理员模式流程图).........................................

(来宾模式流程图)...........................................

七调试分析(各模块测试结果)...............................

7.1源代码................................................

7.2各模块测试结果........................................

八总结......................................................

九参考资料..................................................

一设计目的

通过本课程设计巩固《C语言程序设计》课程的教学成果,深入理解结构体、指针、

链表、动态分配内存和文件操作的等C程序设计中的中高级技术,通过课程设计的

综合训练,培养学生实际分析问题、编程和动手能力、提高学生利用c语言进行程

序设计的能力,初步培养良好的编程习惯和编程风格,初步学习程序的文档的撰写

方法。

二课程设计的内容

通过C语言程序系统,设计一个可以对学生的成绩信息进行管理的程序,其中学生

的信息可以包括:学号、各科•目的成绩的平均分排序等,其功能可以包括学生成绩

的输入、输出、查询、排序、删除、统计、退出等。

三课程设计的要求与数据

1、用C语言实现系统;

2、对学生信息(包括学号、姓名、语文、数学、英语、平均分)进行管理,包括学生成

绩的信息输入、输出、查询、删除、排序、统计、退出、显示,以及整个程序的切

换登录模式和修改管理员的信息.

3、学生信息包括:

⑴、每一条记录包括一个学生的学号、姓名、3门课成绩

⑵、成绩信息录入功能:(成绩信息用文件保存,可以一次完成若干条记录的输入。)

。)、成绩信息显示浏览功能:完成全部学生记录的显示。

(4)、查询功能:完成按姓名查找学生记录,并显示。

⑸、成绩信息的删除:按学号进行删除某学生的成绩.

(6)、排序功能:按学生平均成绩进行排序。

⑺、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰

美观!

四课程设计应完成的工作

⑴编写算法;

⑵算法测试,并有具体的测试结果和结果分析;

(3)撰写课程设计报告。内容包括:

1)封面扉页

2)设计任务书

3)目录

4)总体设计方案(包括流程图)

5)使用说明及运行实例(包括界面)

6)成员设计内容简介

7)项目源程序代码(注意注释的使用)

8)指导教师评语

五总体设计(包含几大功能模块)

1、成绩录入功能

2、成绩输出功能

3、成绩查询功能

4、删除模块

5、排序功能

6、统计功能

7、退出系统

六详细设计

6.1各个模块的功能和实现

(1)整个成绩管理系统设计分为9个模块:

1.输入学生成绩

2.删除学生成绩

3.查询学生成绩

4.修改学生成绩

5.排序学生成绩

6.保存记录

7.显示所有

8.退出系统

9.修改管理员信息

(2)(主要函数的功能)

1.主函数main。:定义学生结构体数组,调用录入:统计等函数对成绩表进行处理。

2.输入数据函数input。:输入学号、成绩。

3.排序函数sort。:对总成绩或者平均成绩,进行排序,按从高到低或者从低到高。

4.显示数据函数display。:显示各个学生的总成绩

5.新增数据函数insert。:增加学生学生记录。

6.删除数据函数del。:由于各种原因,删除某些同学的成绩、学号等。

7.平均值函数average。:求各个同学总成绩的平均值。

8.查询数据函数qur0:查询学生的信息。

9.保存数据函数save。:再一次打开界面是,仍有上次所找的讯息。

10.退出系统函数exit。:当要退出整个系统时。

6.2流程图

(管理员模式流程图)

开始

J______一」

i__

----------------/输出菜单/

(来宾模式流程图)

输出菜

0

七调试分析(各模块测试结米,

7.1源代码

#include<stdio.h>

/?include<string.h>

#include<time.h>

#include<$tdlib.h>

#include<conio.h>

#dcfincHEADER2”学号姓名数学英语C语言总分平均分

育defineFORMAT

%s%s%d%d%d%d%.2f\nu

#defineDATA

p->data.num,p->data.namc,p->data.mgradc,p->data.cgradc,p->data.cgradc,p->data.total,p-

>data.avc

intsaveflag=O;

typedefunsignedshortWORD;

structstudent{

charnum110];

charname[l5];

intmgrade;

integrade;

intcgrade;

inttotal;

floatave;

};

typedefstructnodc{

structstudentdata;

structnode*next;

}Node,*Link;

voidmcnuQ{

time_tnow;

now=time(NULL);

printff,学生成绩管理系统\nn);

printf(n\nM);

printf(n

*******************************************************************\n»);

printff

*W);

printf(n*1输入成绩删除成绩

*W);

printf(n

*W);

printf(n*3查询成绩修改成绩

*\n");

printf(H*

*\n”);

printff**5排序成绩6保存记录

*\n);

printf(n*

*\n");

printf("*7显示所有。退出系统

*\n”);

printff1*

*\n”);

printf(H

*******************************************************************\n“)・

printff1*8切换登录模式9修改管理员信息

*\n)

printf("

******************************************************************^X*\\nIf\);

printff\n请你选择操作命令前的的数字(0〜9):");

intmenu2(){

//intselect;

timc_tnow;

now=time(NULL);

system("clsn);〃清屏

printf(n\n学

生模式\n\n\n");

printfC,学生成绩管理系统\n");

printf(H\nH);

printff,

*******************************************************************\n);

printf(n*

*W);

printfC1*1查询成绩2排序成绩

*W);

printf("*

*\n");

printf("*3显示所有0退出系统

*\n”);

printf(n*

*\n);

printff,

*******************************************************************、11\

\n)te

printf(n*4切换登录模式

*\n”);

printf(n

printfC*\n请你选择噪作命令前的数字(0〜4):");

return0;

voidprintheaderQ

printf(HEADER2);

voidprintdata(Node*pp){

Node*p;

P=PP;

printf(FORMAT,DATA);

voidWrongO{

printf("\n\n\n\n************错误:输入不合法!!!*********\a\n");

getchQ;

voidNofind(){

printf("\n没有该学生!!\n");

Node*locatc(Linkl,charfindmess[],charnamcornumQ)

Node*r;

if(strcmp(nameornum,"num")==0)

r=l->ncxt;

while(r)

if(strcmp(r->data.num,findmess)==O)

returnr;

r=r->next;

elseif(strcmp(nameornLim,,'name,')==0)

r=l->next;

while(r)

if(strcmp(r->,findmess)==O)

rettirnr;

r=r->ncxt;

}

}

return0;

}

voidstringinput(char*t,intlens,char*notice)

{

charn[225];

do

{

printf(notice);

scanf("%su,n);

if(strlen(n)>lens)

printf(”\n超出宽度叭n“);

}while(strlen(n)>lens);

strcpy(t,n);

)

intnumberinput(char*norice)

{intt=0;

do

(

printf(noticc);

scanf(n%dn,&t);

if(t>100111<0)printf(n\n分数必须在0700之间!!!\n");

}while(t>100||t<0);

returnt;

voidDisp(Link1){

Node*p;

systemf'cls1');

p=l->ncxt;

if(!p)

{

printf(H\n目前无学生成绩记录!!\n");

getchO;

return;

}

printf(n\n\nu);

printheaderQ;

while(p)

(

printdata(p);

p=p->next;〃移至下一个结点

voidAdd(Link1){

//printff增加学生记录模块\n");

//system(HPAUSEn);)

Node*p,*r*s;

charch,flag=O,num[10];

r=l;

systcm("clsu);

Disp(l);〃先打印已有的学生信息

while(r->next!=NLJLL)

r=r->ncxt;〃将只指针移至链表末尾,准备添加记录

while⑴〃一次可输入条记录,直至输入的学号我0的记录节点添加操作

s=l->next;

while(l)

stringinput(num,10,”学号(按0退出):");

flag=0;

if(strcmp(num,,,0,t)==0)

return;

s=l->next;

while⑤〃查询学号是否存在,若存在则要求重新输入

{

if(strcmp(s->data.num,num)==O)

{

flag=l;

break;

}

s=s->next;

if(flag==l)//提示用户是否重新输入

getcharQ;

printf("=====>学号%s已存在,是否重新输入?(y/n)\a:”,num);

scanf("%c",&ch);

if(ch=二'y'||ch=='Y)

continue;

else

return;

}

else

break;

p=(Node*)malloc(sizeof(Nodc));

strcpy(p->data.num,num);〃将字符串mun拷贝到p->data.num中

stringinput(p->,15,"name:n);

p->data.cgradc=numbcrinput(Mc[0-100]:n);

p->data.mgrade二numberinput("数学[0-100]:0);

p・>data.egrade二numberinput("英语[0-100]:");

p->data.total=p->data.cgrade+p->data.mgrade+p->data.egrade;

p->data.ave=(float)(p->data.total/3);

p->next=NULL;

whilc(r->ncxt!=NULL)

r=r->next;

r->next=p;

saveflag=1;

voidDel(Link1){

//printf("删除学生记录模块\n");

//system("PAUSE*');

intscl;

Node*p,*r;

charfindmess[20];

if(!l->next)

(

system(Hclsn);

printf("\n二二™〉暂无学生记录!!\n”);

getchQ;

return;

}

system("cls");

DispQ);

printf(-\n1通过学号删除2通过姓名删除\n”);

printf("请选择[1,2门;

scanf("%d”,&sel);

if(scl==l)

{

stringinput(findmessJO」请输入学号门;

p=locate(l,findmess,"num");

if(P)

{

『1;

while(r->next!=p)

r=r->next;

r->next=p->next;

free(p);〃释放内存空间

printfC\n删除成功!\n)

saveflag=l;

else

NofindQ;

elseif(sel==2)

{

stringinput(findmess,15」请输入学生姓名巧;

p=locate(l,findmess,"name");

if(P)

|

r=l;

while(r->next!=p)

r=r->next;

r->next=p->next;

free(p);

printff\n删除成功!!\n)

saveflag=l;

else

NofindQ;

else

WrongQ;

getchQ;

voidQur(Link1){

intselect;

charsearchinput[20];

Node*p;

system^cls1');

if(!l->next)

printff\n暂无学生记录!!\n");

return;

}

printf("\n=======>1通过学号查找=======>2通过姓名查找\n");

printf("请选择口〜2]巧;

scanf(H%d,',&select);

if(sclcct==l)

|

stringinput(searchinputJ()J请输入要查找的学号巧;

p=locate(l,searchinput,''num**);

if(P)

{printheaderQ;

printdata(p);

else

NofindQ;

elseif(select==2)

{

stringinput(searchinput,l*请输入学生姓名巧;

p=locate(l,searchinput,"name");

if(P)

{

printheaderQ;

printdata(p);

}

else

NofindQ;

else

WrongO;

systemCPAUSE*');

}

voidModify(Link1){

Node*p;

charfindmess|20|;

if(!l->next)

|

system(nclsn);

printf(M\n没有该学生记录!\n”);

gctchQ;

return;

systemf'cls11);

printf("修改学生记录”);

Disp(l);

stringinput(6ndmess,10,”请输入学号巧;

p=locate(l,findmess,"num");

if(P)

|

printf("学号:%s,\n",p->data.num);

printf("姓名:%s,”,p->data.namc);

stringinput(p->,15「输入新的姓名巧;

printf("c语言:%d,n,p->data.cgrade);

p->data.cgrade=numberinput("c语言[0〜100]:");

printfC'数学:%d,”,p->data.mgrade);

p->data.mgrade二numberinput("数学[()〜

printf("^in:%d,",p->data.egrade);

p->data.egrade二numberinput("英语[0〜100]:");

p->data.total=p->data.egrade+p->data.cgrade+p->data.mgrade;

p->data.avc=(float)(p->data.total)/3;

printf「\n二二二>修改成功巧;

saveflag=l;

}

else

NofindQ;

gctchQ;

)

voidSort(Link1){

Link11;

Node*p,*rr,*s;

inti=0;

system^cls1');

if(l>next二二NULL)

printff\n暂无学生记录!\n“);

return;

}

11二(Nodc*)malloc(sizeof(Nodc));〃用于创建新的节点

ll->next=NULL;

printff当前状态:\吟;

Disp(l);

system(,,PAUSEn);

p=l->next;

while(p)

|

s=(Node*)mallGc(sizeof(Node));

s->data=p->data;

s->next=NULL;

rr=ll;

whilc(rr->ncxt!=NULL&&rr->ncxt->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;

l->next=ll->next;

p=l->next;

whilc(p!=NULL)

|

i++;

p=p->next;

printf("\n******************************\n"),

Disp(l);

saveflag=1;

printf(n\n******j非序完成*******W);

system(,'PAUSE,');

voidSave(Link1){

//printf("保存模块\n");

//system("PAUSEH);

FILE*fp;

Node*p;

intcount=0;

fp=fopen(nstudent.txt,'/,wb,');

p=l->next;

while(p)

(

if(fwrite(p,sizeof(Ncde),l,fp)==l)

|

p=p->next;

count++;

)

else

break;

if(count>0)

printff'\n\n\n\n\n保存完毕,当前共有%€1名学生记录\n”,count);

saveflag=O;

}

else

printf(”空文件,保存失败!!\n”);

fclosc(fp);//关闭文件

getchQ;

)

intlogin。

(

FILE

intstate;

charstrl[20],str2[20],str_z[20],str_m[7];

if((fpl=fopen("adrnin.txt,,,,,rb,,))==NULL)

(

printf(”本系统无管理员,请创建!\n\n请输入管理员账号:”);

scanf(H%sn,str_z);

printf(”请设置一个六位数密码巧;

fp2=fopen(nadmin.txt",nwb");

fprintf(fp2,,,%s%c,\str_z,,\nr);

fprintf(fp2,"%s%c”,str_m;

fclose(fp2);

}

fpl=fopen(,'admin.txt'7i*bn);

fscanf(fpl,n%sn,strl);

fscanf(fpl,n%sn,str2);

fclose(fpl);

while(l)

printf("请选择你的登录方式:\n\nn);

printf(”L管理员模式0.来宾模式\n”);

printf("请选择:(0~1)”);

scanf(n%dH,&state);

if(state==O)

return0;

elseif(statc==l)

|

prints请输入账号:");

scanf(n%sn,str_z);

if(strcmp(strl,str_z)==0&&stremp(str2,str_m)==0)

return1;

else

printf("账号或密码错误叭a\n”);

systcmC'PAUSE”);

system(MclsH);

}

else

{

printf("输入不合法!!!\a\n");

exit(O);

)

voidModify_adminQ

FILE*fp;

charstr_z[20],str_m|7]='n,;

fp=fopen(uadmin.txt',,,,wbn);

printf("请输入管理员账号:”);

scanf("%s",str_z;\n);

printf("请输入密码:”);

fprintf(fp,u%s%c,',str_z,,\nr);

fprintf(fp,"%s%c",str_m,'*);

fclosc(fp);

printf("管理员信息更新完毕!!\a\n");

getchQ;

}

intmainQ

LinkL;

FILE*fp;

intselect,State=O;

charch,admin[20],admin_p[20];

intcount=0;

Node*p,*r;

system("color0A");

L=(Node*)malloc(sizeoffNode));

L->next=NULL;

r=L;

fp=fopen("stiident.txt,,,''ab+,');

Loop:{

State=loginO;

}

while(!feof(fp))

{p=(Node*)malloc(sizeof(Node));

if(fread(p,sizeof(Node),l,fp)==l)

p->ncxt=NULL;

r->next=p;

r二P;

count++;

)

}

fclosc(fp);

if(State==l)

{

while(l)

|

system(nclsn);

printf(H\n管理员模式\n\n”);

menu。;

P=r;

scanf(n%dn,&sclcct);

if(select==O)

if(saveflag==l)

(

getcharQ;

print/\n记录已修改,是否保存当时记录?(y/n)巧;

scanf(n%c",&ch);

if(ch==y||ch==,Y,)

Save(T,);

)

printf(“谢谢您的使用叭心;

break;

switch(select)

casel:Add(L

温馨提示

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

评论

0/150

提交评论