成绩管理系统软件设计课程报告附完整C语言程序代码Word文档格式.docx
《成绩管理系统软件设计课程报告附完整C语言程序代码Word文档格式.docx》由会员分享,可在线阅读,更多相关《成绩管理系统软件设计课程报告附完整C语言程序代码Word文档格式.docx(26页珍藏版)》请在冰豆网上搜索。
内容:
成绩信息
学号姓名数学英语语文理综
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<
stdio.h>
conio.h>
malloc.h>
string.h>
stdlib.h>
typedefstructSTUDENT//定义结构体
{
charstudentNumber[20];
charstudentName[20];
floatmark1;
floatmark2;
floatmark3;
floatmark4;
structSTUDENT*next;
}STUDENT;
STUDENT*headLink;
//链表表头指针
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),&
mark2),&
mark3),&
mark4))>
0)
InsertOneNode(p);
//将读取的信息用链表存储
p=MallocNode();
fclose(fp);
}
voidDesplayMenu(void)//显示菜单
charch;
intchoose;
/*用于接受用户的选择*/
printf("
主菜单:
\t\t\t\t0.EXIT\n"
\t1.学生信息\t\t2.本科统计\t\t3.成绩排序\n\t4.添加学生\t\t5.删除学生"
\t\t6.按名修改\n\t7.按号修改\t\t8.查询成绩\t\t9.保存信息\n"
请选择:
"
scanf("
%d"
&
choose);
/*取得用户的选择*/
switch(choose)
case1:
OutputInformation();
break;
case2:
//本科线学生
printf("
1.一本人数2.二本人数3.三本人数0.退出\n"
请您选择:
ch=getchar();
do
{
switch(ch)
{
case'
1'
:
DesplayMarkSegment1();
//一本
printf("
break;
2'
DesplayMarkSegment2();
//二本
3'
DesplayMarkSegment3();
//三本
default:
}
ch=getchar();
}while(ch!
='
0'
case3:
//成绩排序
1.按总分2.按学号3.按姓名0.退出\n"
CompositorByTotalMark();
CompositorBynumber();
CompositorByname();
}
case4:
//填加学生
p=MallocNode();
GetInformation(p);
InsertOneNode(p);
case5:
DeleteNodeBystudentNumber();
case6:
ChangeMarkByName();
case7:
//按号改成绩
ChangeMarkByNumber();
case8:
//查询成绩
1.按学号2.按姓名0.退出\n"
DesplayInfoBystudentName();
DesplayInfoBystudentnumber();
case9:
SaveLinkToFile();
case0:
//保存数据到文件中
free(headLink);
//释放头结点
exit(0);
default:
--------------------------------------------------------------------------------"
DesplayMenu();
//递归调用
voidCreateHeadLink(void)//创建链表
p=(STUDENT*)malloc(sizeof(STUDENT));
headLink=p;
p->
next=NULL;
STUDENT*MallocNode(void)//函数功能:
申请一个新结点,并将其初始化
inti;
if(p==NULL)
returnNULL;
for(i=0;
i<
20;
i++)
p->
studentNumber[i]='
\0'
;
studentName[i]='
}
mark1=0.0;
mark2=0.0;
mark3=0.0;
mark4=0.0;
returnp;
voidGetInformation(STUDENT*t)//从键盘得到学生成绩
请输入学生学号:
%s"
t->
studentNumber);
请输入学生姓名:
studentName);
请输入数学成绩:
%f"
(t->
mark1));
请输入英语成绩:
mark2));
请输入语文成绩:
mark3));
请输入理综成绩:
mark4));
voidInsertOneNode(STUDENT*t)//函数功能:
在链表的结尾处增加一个结点
p=headLink;
while(p->
next)
p=p->
next;
next=t;
voidDesplayInfoBystudentName(void)//按姓名查找
charflag=0;
p=headLink->
studentName);
while(p)
if(strcmp(p->
studentName,studentName)==0)
{
学号\t姓名\t数学\t英语\t语文\t理综\t总成绩\n"
DesplayOneNode(p);
flag=1;
}
flag)
Sorry,姓名为%s的学生不存在!
voidDesplayInfoBystudentnumber(void)//按学号查找
studentNumber);
studentNumber,studentNumber)==0)
学号\t姓名\t数学\t英语\t语文\t理综\t总成绩\n\n"
Sorry,学号为%s的学生不存在!
voidDesplayOneNode(STUDENT*t)//显示函数
%s\t"
%.0f\t"
mark1);
mark2);
mark3);
mark4);
mark1+t->
mark2+t->
mark3+t->
voidDeleteNodeBystudentNumber(void)//按学号删除学生
charstudentNumber[10];
STUDENT*p,*q;
请输入要删除学生学号:
q=headLink->
while(q)
if(strcmp(q->
next=q->
free(q);
flag=1;
break;
p=p->
q=q->
该学号:
%s的学生不存在!
删除成功!
voidOutputInformation(void)//所有学生信息输出
系统无学生,请先输入学生信息!
\n\n"
DesplayOneNode(p);
voidChangeMarkByName(void)//按姓名修改成绩
floatmark1,mark2,mark3,mark4;
请输入新的数学成绩:
scanf("
请输入新的英语成绩:
请输入新的语文成绩:
请输入新的理综成绩:
p->
mark1=mark1;
mark2=mark2;
mark3=mark3;
mark4=mark4;
修改成功!
}
voidChangeMarkByNumber(void)//按学号修改成绩