成绩管理系统软件设计课程报告附完整C语言程序代码.docx
《成绩管理系统软件设计课程报告附完整C语言程序代码.docx》由会员分享,可在线阅读,更多相关《成绩管理系统软件设计课程报告附完整C语言程序代码.docx(26页珍藏版)》请在冰豆网上搜索。
![成绩管理系统软件设计课程报告附完整C语言程序代码.docx](https://file1.bdocx.com/fileroot1/2023-1/24/ec0ba5fb-8d6f-4732-b40d-0e736cd2e6e2/ec0ba5fb-8d6f-4732-b40d-0e736cd2e6e21.gif)
成绩管理系统软件设计课程报告附完整C语言程序代码
学生<高考>成绩管理系统
软
件
设
计
课
程
报
告
设计者:
XXXXX
专业班级:
XXXXX
学号:
XXXXX
2012年06月06日
目录
1系统软件环境3
2课程设计目的3
3内容与要求3
4程序主要功能4
5函数实现功能说明4
6心得与体会5
7程序功能模块6
8程序完整代码8
1系统软件环境
本程序主要运行在:
Visual6/C++6.0
2课程设计目的
本课程设计的系统是早已在很多领域均有应用,是一个很不错的教学管理系统,而且其功能更是相当强大、界面更加友好的应用型软件。
而现在我的设计并非是重走旧路,我的设计主要目的在于学习并深刻地掌握对C语言和数据结构的基础知识以及其实践经验,为以后的学习和工作中能够更好地运用编程软件打下一个坚实的基础。
而且特别是像这种比较多地运用一些课本上没有教的知识来编程的题目,更能提高我们的学习能力,如菜单函数MENU。
其次,通过这种自己设计程序结构,自己书写代码的过程,更提高了我们的的实践操作能力,寓理论于实践中,才能使自己更深刻的认识到自己为什么要学习编程,程序到底有什用处。
3内容与要求
内容:
成绩信息
学号姓名数学英语语文理综
1111周恩来140142130236
3333加加林145130110220
2222刘学11599120190
5555乔丹100111110160
4444Five1089079163
请用C/C++编写一个系统,实现学生信息管理,软件的入口界面应包括如下几个方面:
要求:
(1)信息维护:
学生信息数据要以文件的形式保存,能实现学生信息数据的维护。
此模块包括子模块有:
增加学生信息、删除学生信息、修改学生信息
(2)信息查询:
查询时可实现按姓名查询、按学号查询
(3)成绩统计能统计本科生人数(一本,二本,三本)
4程序主要功能
1)、学生信息2)、本科统计3)、成绩排序4)、添加学生
5)、删除学生6)、按名修改7)、按号修改8)、查询成绩
9)、保存信息0)退出
5函数实现功能说明
主菜单界面如下
6心得与体会
通过本次对C语言的深入学习,我对C语言有了更多的了解,撑握了更多编程的知识。
我这次成功地运用各类函数、循环变量、结构体、指针、链表等完成程序的编写,使自己在编程方面有了很大提高,对未来新的编程软件的学习也更有信心啦。
但在学习中,我发现编程其实并不是件容易的事,更不是你想程序完成什么功能就能完成什么功能的。
首先,我觉的编程绝不是拿到一个问题就开始编程,而是在我们对程序的整体结构有一定的构思后,方可敲击程序。
其次,编程需要的是程序员的认真和仔细的态度,务实地对待每一条程序语句,做到字斟句酌,锱铢必较,方能快速高效的编出好的程序来。
由于本人目前只学过C语言和数据结构,并没有学过数据库等课程,能力有限,部分要求(如界面的美观化等)未能做的很好,望老师指正,学生定当会努力改正。
7程序功能模块
注意
亲:
应用此程序时,请在D盘中建立一个名为student.txt的文本文件(用于存放学生信息,其信息分别为学号、姓名、及四门课程的成绩)。
如下图所示:
图一student.txt文档存放位置如下图
图二student.txt文挡信息如下图
函数功能模块
voidDesplayMarkSegment3(void);//三本人数
voidDesplayMarkSegment2(void);//二本人数
voidDesplayMarkSegment1(void);//一本人数
voidReadInfoFormFile(void);//读取信息
voidDesplayMenu(void);//菜单显示
voidCreateHeadLink(void);//创建链表
STUDENT*MallocNode(void);//申请新节点
voidGetInformation(STUDENT*t);//获得学生信息
voidOutputInformation(void);//输出信息
voidDesplayInfoBystudentName(void);//按姓名查找
voidDesplayInfoBystudentnumber(void);//按学号查找
voidDesplayOneNode(STUDENT*t);//显示一个学生的信息
voidInsertOneNode(STUDENT*t);//添加学生
voidDeleteNodeBystudentNumber(void);//删除学生
voidChangeMarkByName(void);//按名改成绩
voidChangeMarkByNumber(void);//按号改成绩
voidSaveLinkToFile(void);//保存
voidCompositorByTotalMark(void);//按总分排序
voidCompositorBynumber(void);//按学号排序
voidCompositorByname(void);//按姓名排序
8程序完整代码
/*学生<高考>成绩管理系统*/
#include
#include
#include
#include
#include
typedefstructSTUDENT//定义结构体
{
charstudentNumber[20];
charstudentName[20];
floatmark1;
floatmark2;
floatmark3;
floatmark4;
structSTUDENT*next;
}STUDENT;
STUDENT*headLink;//链表表头指针
voidDesplayMarkSegment3(void);//三本人数
voidDesplayMarkSegment2(void);//二本人数
voidDesplayMarkSegment1(void);//一本人数
voidReadInfoFormFile(void);//读取信息
voidDesplayMenu(void);//菜单显示
voidCreateHeadLink(void);//创建链表
STUDENT*MallocNode(void);//申请新节点
voidGetInformation(STUDENT*t);//获得学生信息
voidOutputInformation(void);//输出信息
voidDesplayInfoBystudentName(void);//按姓名查找
voidDesplayInfoBystudentnumber(void);//按学号查找
voidDesplayOneNode(STUDENT*t);//显示一个学生的信息
voidInsertOneNode(STUDENT*t);//添加学生
voidDeleteNodeBystudentNumber(void);//删除学生
voidChangeMarkByName(void);//按名改成绩
voidChangeMarkByNumber(void);//按号改成绩
voidSaveLinkToFile(void);//保存
voidCompositorByTotalMark(void);//按总分排序
voidCompositorBynumber(void);//按学号排序
voidCompositorByname(void);//按姓名排序
voidReadInfoFormFile(void)//读取信息
{
FILE*fp;
STUDENT*p;
fp=fopen("D:
\\student.txt","r");
if(!
fp)
{
printf("系统提示:
该系统现在没有学生!
!
!
(原因:
请检查D:
\\student.txt学生文件是否存在)。
\n");
return;
}
p=MallocNode();
while(fscanf(fp,"%s%s%f%f%f%f",p->studentNumber,p->studentName,&(p->mark1),&(p->mark2),&(p->mark3),&(p->mark4))>0)
{
InsertOneNode(p);//将读取的信息用链表存储
p=MallocNode();
}
fclose(fp);
}
voidDesplayMenu(void)//显示菜单
{
STUDENT*p;
charch;
intchoose;/*用于接受用户的选择*/
printf("主菜单:
\t\t\t\t0.EXIT\n");
printf("\t1.学生信息\t\t2.本科统计\t\t3.成绩排序\n\t4.添加学生\t\t5.删除学生");
printf("\t\t6.按名修改\n\t7.按号修改\t\t8.查询成绩\t\t9.保存信息\n");
printf("请选择:
");
scanf("%d",&choose);/*取得用户的选择*/
printf("\n");
switch(choose)
{
case1:
OutputInformation();
break;
case2:
//本科线学生
printf("1.一本人数2.二本人数3.三本人数0.退出\n");
printf("请您选择:
");
ch=getchar();
do
{
switch(ch)
{
case'1':
DesplayMarkSegment1();//一本
printf("请您选择:
");
break;
case'2':
DesplayMarkSegment2();//二本
printf("请您选择:
");
break;
case'3':
DesplayMarkSegment3();//三本
printf("请您选择:
");
break;
default:
break;
}
ch=getchar();
}while(ch!
='0');
break;
case3:
//成绩排序
printf("1.按总分2.按学号3.按姓名0.退出\n");
printf("请您选择:
");
ch=getchar();
do
{
switch(ch)
{
case'1':
CompositorByTotalMark();
printf("请您选择:
");
break;
case'2':
CompositorBynumber();
printf("请您选择:
");
break;
case'3':
CompositorByname();
printf("请您选择:
");
break;
default:
break;
}
ch=getchar();
}while(ch!
='0');
break;
case4:
//填加学生
p=MallocNode();
GetInformation(p);
InsertOneNode(p);
OutputInformation();
break;
case5:
//删除学生
DeleteNodeBystudentNumber();
OutputInformation();
break;
case6:
//按名改成绩
ChangeMarkByName();
OutputInformation();
break;
case7:
//按号改成绩
ChangeMarkByNumber();
OutputInformation();
break;
case8:
//查询成绩
printf("1.按学号2.按姓名0.退出\n");
printf("请您选择:
");
ch=getchar();
do
{
switch(ch)
{
case'2':
DesplayInfoBystudentName();
printf("请您选择:
");
break;
case'1':
DesplayInfoBystudentnumber();
printf("请您选择:
");
break;
default:
break;
}
ch=getchar();
}while(ch!
='0');
break;
case9:
SaveLinkToFile();
break;
case0:
SaveLinkToFile();//保存数据到文件中
free(headLink);//释放头结点
exit(0);
break;
default:
break;
}
printf("--------------------------------------------------------------------------------");
DesplayMenu();//递归调用
}
voidCreateHeadLink(void)//创建链表
{
STUDENT*p;
p=(STUDENT*)malloc(sizeof(STUDENT));
headLink=p;
p->next=NULL;
}
STUDENT*MallocNode(void)//函数功能:
申请一个新结点,并将其初始化
{
STUDENT*p;
inti;
p=(STUDENT*)malloc(sizeof(STUDENT));
if(p==NULL)
{
returnNULL;
}
for(i=0;i<20;i++)
{
p->studentNumber[i]='\0';
}
for(i=0;i<20;i++)
{
p->studentName[i]='\0';
}
p->mark1=0.0;
p->mark2=0.0;
p->mark3=0.0;
p->mark4=0.0;
p->next=NULL;
returnp;
}
voidGetInformation(STUDENT*t)//从键盘得到学生成绩
{
printf("请输入学生学号:
\n");
scanf("%s",t->studentNumber);
printf("请输入学生姓名:
\n");
scanf("%s",t->studentName);
printf("请输入数学成绩:
\n");
scanf("%f",&(t->mark1));
printf("请输入英语成绩:
\n");
scanf("%f",&(t->mark2));
printf("请输入语文成绩:
\n");
scanf("%f",&(t->mark3));
printf("请输入理综成绩:
\n");
scanf("%f",&(t->mark4));
}
voidInsertOneNode(STUDENT*t)//函数功能:
在链表的结尾处增加一个结点
{
STUDENT*p;
p=headLink;
while(p->next)
{
p=p->next;
}
p->next=t;
}
voidDesplayInfoBystudentName(void)//按姓名查找
{
STUDENT*p;
charstudentName[20];
charflag=0;
p=headLink->next;
printf("请输入学生姓名:
\n");
scanf("%s",studentName);
while(p)
{
if(strcmp(p->studentName,studentName)==0)
{
printf("学号\t姓名\t数学\t英语\t语文\t理综\t总成绩\n");
DesplayOneNode(p);
flag=1;
break;
}
p=p->next;
}
if(!
flag)
printf("Sorry,姓名为%s的学生不存在!
\n",studentName);
}
voidDesplayInfoBystudentnumber(void)//按学号查找
{
STUDENT*p;
charstudentNumber[20];
charflag=0;
p=headLink->next;
printf("请输入学生学号:
\n");
scanf("%s",studentNumber);
while(p)
{
if(strcmp(p->studentNumber,studentNumber)==0)
{
printf("学号\t姓名\t数学\t英语\t语文\t理综\t总成绩\n\n");
DesplayOneNode(p);
flag=1;
break;
}
p=p->next;
}
if(!
flag)
printf("Sorry,学号为%s的学生不存在!
\n",studentNumber);
}
voidDesplayOneNode(STUDENT*t)//显示函数
{
printf("%s\t",t->studentNumber);
printf("%s\t",t->studentName);
printf("%.0f\t",t->mark1);
printf("%.0f\t",t->mark2);
printf("%.0f\t",t->mark3);
printf("%.0f\t",t->mark4);
printf("%.0f\t",t->mark1+t->mark2+t->mark3+t->mark4);
printf("\n");
}
voidDeleteNodeBystudentNumber(void)//按学号删除学生
{
charstudentNumber[10];
STUDENT*p,*q;
charflag=0;
printf("请输入要删除学生学号:
");
scanf("%s",studentNumber);
p=headLink;
q=headLink->next;
while(q)
{
if(strcmp(q->studentNumber,studentNumber)==0)
{
p->next=q->next;
free(q);
flag=1;
break;
}
p=p->next;
q=q->next;
}
if(!
flag)
{
printf("该学号:
%s的学生不存在!
\n",studentNumber);
return;
}
printf("删除成功!
\n");
}
voidOutputInformation(void)//所有学生信息输出
{
STUDENT*p;
p=headLink->next;
if(p==NULL)
{
printf("系统无学生,请先输入学生信息!
\n\n");
return;
}
printf("学号\t姓名\t数学\t英语\t语文\t理综\t总成绩\n");
while(p)
{
DesplayOneNode(p);
p=p->next;
}
}
voidChangeMarkByName(void)//按姓名修改成绩
{
STUDENT*p;
charstudentName[20];
charflag=0;
floatmark1,mark2,mark3,mark4;
p=headLink->next;
printf("请输入学生姓名:
");
scanf("%s",studentName);
while(p)
{
if(strcmp(p->studentName,studentName)==0)
{
printf("请输入新的数学成绩:
\n");
scanf("%f",&mark1);
printf("请输入新的英语成绩:
\n");
scanf("%f",&mark2);
printf("请输入新的语文成绩:
\n");
scanf("%f",&mark3);
printf("请输入新的理综成绩:
\n");
scanf("%f",&mark4);
p->mark1=mark1;
p->mark2=mark2;
p->mark3=mark3;
p->mark4=mark4;
flag=1;
printf("修改成功!
\n");
break;
}
p=p->next;
}
if(!
flag)
printf("Sorry,姓名为%s的学生不存在!
\n",studentName);
}
voidChangeMarkByNumber(void)//按学号修改成绩
{
STUDENT*p;
charstudentNumber[20];
charflag=0;
floatmark1,mark2,mark3,mark4;
p=headLink->next;
printf("请输入学生学号:
");
scanf("%s",studentNumber);
while(p)
{
if(strcmp(p->studentNumber,studentNumber)==0)
{