c语言课程设计学生成绩管理系统.docx
- 文档编号:17279258
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:34
- 大小:751.52KB
c语言课程设计学生成绩管理系统.docx
《c语言课程设计学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《c语言课程设计学生成绩管理系统.docx(34页珍藏版)》请在冰点文库上搜索。
c语言课程设计学生成绩管理系统
C语言课程设计报告
设计题目:
学生成绩管理系统
专业软件工程
班级111032
学生高红斌
指导教师王庆飞
设计时间2012-7-10
设计任务:
C语言课程设计任务书及指导书3
题目:
学生成绩管理系统
功能:
学生成绩管理系统,每个学生信息为一个记录,包括学号,姓名,性别,3门课程成绩。
系统要求实现以下功能:
1、信息录入:
录入成绩学生信息(包括学生学号、姓名、性别、3门课程的成绩等);
2、信息查询:
可以按照姓名或学号查询学生各门课程的成绩,并显示。
3、排序:
按平均成绩或各门课程成绩按由高到低进行排序,并显示。
4、信息删除与修改——输入学号,可删除或修改该学生的成绩信息。
5、保存:
将相关数据写入磁盘文件,便于存、取操作。
平时:
验收:
报告:
总评成绩:
指导教师签名:
一、总体设计
1.1.功能模块设计
:
1.2.数据结构设计
1)自定义的数据类型:
structstudent
{charnum[10];/*学号*/
charname[20];/*姓名*/
charsex[4];/*性别*/
intcomputer;/*计算机成绩*/
intEnglish;/*英语成绩*/
intmath;/*高数成绩*/
};
2)文件:
设计了student文件,是为了长期保存学生的学号、姓名、性别、计算机成绩、英语成绩、高数成绩等数据。
1.3.函数原型设计
1》voidprintgaohongbin1()
函数功能:
用二维数组输出图案
无参函数
2》voidmenu()
函数功能:
输出程序功能菜单
二、详细设计
1.
2.
2.1.界面设计
2.1.1.开始界面
2.1.2登记学生资料的界面
2.1.3删除功能的界面:
2.1.3删除学生资料的界面
2.1.4查询学生资料的界面
2.1.5修改学生资料的界面
保存功能的界面:
2.1.7退出功能的界面:
2.1
算法流程图
2.2.1删除功能模块流程图
2.2.2查询功能模块流程图
2.2.3修改功能模块流程图
2.2.4保存功能模块流程图
三、测试及运行效果
3
3.1运行进入程序主菜单
主选单具有所有函数的功能实现的选择功能,通过主选单的操作进入各个功能。
主选单主要由主函数提供,其功能由子函数实现。
3.2学生成绩登记模块
3.3删除学生成绩模块
3.3查询学生成绩模块
进入查找记录界面
3.4修改模块
进入修改界面
3.5保存模块
进入保存界面
可以根据要求添加用户想添加的人员信息。
3.6退出模块
进入退出界面:
四、总结
通过编写程序,我收获了很多,同样我也感受到了很多,重要的是自己的不足之处,发现自己在C语言的学习中要很多东西没有学好,致使在程序设计中遇到了很大的困难和障碍自己感觉到很难受,很遗憾。
我知道C语言是以后专业课程的基础,学好它对于我以后的语言学习将有很大的帮助,虽然自己在学习这门课的时候比较认真,但是由于方法不得当,效率不高,所以感觉到自己没有学好,在这次程序设计中,当我遇到自己不懂得地方时,及时查找课本,主动请教老师或同学,克服了重重困难。
在程序设计中,我发现自己在指针、链表、文件等知识方面不是很懂,而这些只是恰恰是C语言的精华部分,只有精通了这一部分,才能用C语言编写出好的程序来,所以在以后的程序设计中我将充分运用这些知识来编写出高水平的程序,重要是能满足使用者的更大需求,形成良好的人机交往,努力做一个熟练的程序设计者,精通自己的专业知识。
附录:
源程序
#include
#include
#include
intshoudsave=0;
structstudent
{charnum[10];/*学号*/
charname[20];
charsex[4];
intcomputer;
intEnglish;
intmath;};
typedefstructnode
{structstudentdata;
structnode*next;}Node,*Link;
voidprintgaohongbin1()
{chardiamond[][19]={{'','','','','','','','','','*'},
{'','','','','','','','*','','','','*'},
{'','','','','','*','','','','','','','','*'},
{'','','','*','','','','','','','','','','','','*'},
{'','*','','','','','','','','','','','','','','','','*'}};
inti,j;
for(i=0;i<5;i++)
{for(j=0;j<19;j++)
printf("%c",diamond[i][j]);
printf("\n");
}
}
voidprintgaohongbin2()
{chardiamond[][19]={{'','*','','','','','','','','','','','','','','','','*'},
{'','','','*','','','','','','','','','','','','*'},
{'','','','','','*','','','','','','','','*'},
{'','','','','','','','*','','','','*'},
{'','','','','','','','','','*'}};
inti,j;
for(i=0;i<5;i++)
{for(j=0;j<19;j++)
printf("%c",diamond[i][j]);
printf("\n");
}
}
voidmenu()
{printf("*****************+++++++++++++*************++++++++++++*******************\n");
printf("**+Howdoyoudo!
**\n");
printf("***+1-----登记学生资料(register)***\n");
printf("***+2-----删除学生资料(Delete)***\n");
printf("***+3-----查询学生资料(Search)***\n");
printf("***+4-----修改学生资料(Update)***\n");
printf("***+5-----保存学生资料(save)***\n");
printf("*欢迎!
**+6-----退出系统(Exit)*欢迎!
**\n");
printf("**+7-----结束语(good-bye)**\n");
printf("*****************+++++++++++++*************++++++++++++*******************\n");
}
voidprintstart()
{printf("%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&^^@@@@@@@@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n");}
voidWrong()
{printf("\n********>>>>>>提示:
输入错误!
\n");}
voidNofind()
{printf("\n>>>>>>提示:
没有找到该学生!
\n");}
voidprintc()/*本函数用于输出中文*/
{
printf("学号\t姓名性别\t计算机\t英语\t高数\t\n");}
voidprinte(Node*p)/*本函数用于输出英文*/
{
printf("%-12s%s\t%s\t%d\t%d\t%d\n",p->data.num,p->data.name,p->data.sex,p->puter,p->data.English,p->data.math);
}
Node*Locate(Linkl,charfindmess[],charnameornum[])/*该函数用于定位连表中符合要求的接点,并返回该指针*/
{
Node*r;
if(strcmp(nameornum,"num")==0)/*按学号查询*/
{
r=l->next;
while(r!
=NULL)
{
if(strcmp(r->data.num,findmess)==0)
returnr;
r=r->next;
}
}
return0;
}
voidAdd(Linkl)/*增加学生*/
{
Node*p,*r,*s;
charnum[10];
r=l;
s=l->next;
while(r->next!
=NULL)
r=r->next;/*将指针置于最末尾*/
while
(1)
{
printf("请你输入学号\n");
printf("(以'0'返回上一级菜单)\n");
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->puter);
getchar();
printf("请你输入英语成绩:
");
scanf("%d",&p->data.English);
getchar();
printf("请你输入高数成绩:
");
scanf("%d",&p->data.math);
getchar();
/*信息输入已经完成*/
p->next=NULL;
r->next=p;
r=p;
shoudsave=1;
}
}
voidQur(Linkl)/*查询学生*/
{
charfindmess[20];
Node*p;
if(!
l->next)
{printf("\n=====>提示:
没有资料可以查询!
\n");
return;}
printf("请你输入要查找的学号:
");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("\t\t\t\t查找结果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
voidDel(Linkl)/*删除*/
{
Node*p,*r;
charfindmess[20];
if(!
l->next)
{
printf("\n=====>提示:
没有资料可以删除!
\n");
return;}
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();
}
voidModify(Linkl)
{
Node*p;
charfindmess[20];
if(!
l->next)
{
printf("\n=====>提示:
没有资料可以修改!
\n");
return;}
printf("请你输入要修改的学生学号:
");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("请你输入新学号:
");
scanf("%s",p->data.num);
printf("请你输入新姓名:
");
scanf("%s",p->data.name);
getchar();
printf("请你输入新性别:
");
scanf("%s",p->data.sex);
printf("请你输入新的计算机成绩:
");
scanf("%d",&p->puter);
getchar();
printf("请你输入新的英语成绩:
");
scanf("%d",&p->data.English);
getchar();
printf("请你输入高数成绩:
");
scanf("%d",&p->data.math);
printf("\n=====>提示:
资料修改成功!
\n");
shoudsave=1;
}
else
Nofind();
}
voidDisp(Linkl)
{
intcount=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");
}
voidSave(Linkl)
{
FILE*fp;
Node*p;
intflag=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);
}
voidmain()
{
Linkl;/*连表*/
FILE*fp;/*文件指针*/
intsel;
charch;
charjian;
intcount=0;
Node*p,*r;
printf("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n");
printf("+学生成绩管理系统+\n");
printf("+设计者:
计算机科学与信息工程学院软件工程+\n");
printf("+11103205高红斌+\n");
printf("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n");
l=(Node*)malloc(sizeof(Node));
l->next=NULL;
r=l;
fp=fopen("C:
\\student","rb");
if(fp==NULL)
{
printf("\n=====>提示:
文件还不存在,是否创建?
(y/n)\n");
scanf("%c",&jian);
if(jian=='y'||jian=='Y')
fp=fopen("C:
\\student","wb");
else
exit(0);
}
printf("\n=====>提示:
文件已经打开,正在导入记录......\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);/*关闭文件*/
printf("\n=====>提示:
记录导入完毕,共导入%d条记录.\n",count);
while
(1)
{
menu();
printf("请你选择操作:
");
scanf("%d",&sel);
if(sel==6)
{if(shoudsave==1)
{
getchar();
printf("\n=====>提示:
资料已经改动,是否将改动保存到文件中(y/n)?
\n");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save(l);
}
printgaohongbin1();
printf("欢迎您的使用,谢谢\n");
printgaohongbin2();
break;
}
switch(sel)
{
case1:
Add(l);break;/*增加学生*/
case2:
Del(l);break;/*删除学生*/
case3:
Qur(l);break;/*查询学生*/
case4:
Modify(l);break;/*修改学生*/
case5:
Save(l);break;/*保存学生*/
default:
Wrong();getchar();break;}
}
}
参考文献
[1]谭浩强.C程序设计(第4版).清华大学出版社,2010.
[2]苏小红.C语言程序设计(第1版).高等教育出版社,2011.
[3]谭浩强.C程序设计题解与上机指导(第三版).清华大学出版社,2005.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 学生 成绩管理系统
![提示](https://static.bingdoc.com/images/bang_tan.gif)