数据结构课程设计《学生成绩管理系统》《参考版》Word下载.docx
《数据结构课程设计《学生成绩管理系统》《参考版》Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计《学生成绩管理系统》《参考版》Word下载.docx(36页珍藏版)》请在冰豆网上搜索。
6
2总体设计。
7
2.1程序设计组成框图。
8
2.2模块功能说明。
9
2.3程序流程图。
10
2.4主要函数之间相互调用。
11
3在设计过程中的感受。
12
致谢。
13
参考文献。
14
附录:
源程序清单。
15
1.绪论
1.1选题背景
为了提高高校学生信息的管理效率,方便对学生信息进行管理、学校里面的学生和管理员方便去管理和查询学生信息,如再要进行查询,就得在众多的学生信息中查找自己的成绩信息,面对学院大量的学生信息,怎么可以即时而方便的管理,学生只要登录本系统就可以查找到自己的成绩信息,而管理员也方便去管理每学期的学生的成绩信息。
建立一个学生信息管理系统,使学生信息管理工作规范化,系统化,程序化,避免学生管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改学生信息是必须而且十分迫切的工作。
2.1需求分析
学生管理系统功能的信息量大,数据安全性和保密性要求最高。
本功能实现对专业信息、学生信息、教师信息情况信息的管理和统计、课程信息和成绩信息查看及维护。
系统管理员可以浏览、查询、学生的基本信息,能添加、删除和修改学生信息,这部分功能应该由系统管理员执行,但是,删除某条专业基本信息记录时,应实现对该专业的相关信息也级联删除。
并且还应具有查询,并打印输出的功能
设计不同用户的操作权限和登陆方法、对所有用户开放的用户提供学生成绩信息查询、由于本系统功能实现方面并不太复杂,所以上面只是相关的学生信息管理查询的总体分析,具体实现就主要体现在学生管理,教师的管理和课程的管理这一块,也就是重点实现查询与添加学生信息,以及对成绩信息管理。
2.总体设计
(1)程序设计组成框图
学生成绩管理系统
1.按班级输出学生成绩单
2.按姓名查询
3.增加学生
4.删除学生
5.按班级修改学生成绩
6.按班学期改学生成绩
7.保存所有学生信息
8.显示不及格学生成绩
9.按平均成绩排序并输出成绩
10.退出
(2)模块功能说明
1输出功能:
完成全部学生记录的显示。
2查询功能:
输入姓名可以查询学生的详细信息。
3增加功能:
增加新学生的信息。
4删除功能:
删除学生信息。
5修改功能:
修改学生的错误信息。
6保存功能:
保存已输入信息。
7读取功能:
读取已输入信息。
8显示功能:
按要求显示学生记录。
9排序功能:
按要求完成对学生信息的排序。
10退出系统。
(3)程序流程图
开始
输入指令(1~10)
学生成绩单
按姓名查询
增加学生
删除学生
按班级修改
按学期修改
保存信息
不及格成绩
平均分排序
退出
1
2
3
4
5
6
7
8
100
结束
(4)主要函数之间相互调用如下:
主函数main()的调用
switch(choice)
{case1:
OutputInformation();
break;
case2:
DesplayInfoBystudentName();
case3:
p=MallocNode();
GetInformation(p);
InsertOneNode(p);
break;
case4:
DeleteNodeBystudentNumber();
case5:
ChangeMarkByName();
case6:
ChangeMarkByNumber();
case7:
SaveLinkToFile();
case8:
DesplayMarkSegment();
case9:
CompositorByTotalMark();
case10:
}
总结
首先经过一周的编程实习,并在后一段的报告总结,我对数据结构这门科有新的认识,本人实在是获益不浅!
要想编写一个准确、高效并有使用价值的程序,一定先要对课本知识熟悉,还要掌握必要的上机操作能力,写程序其实很容易而关键在于调试程序。
这次设计,让我重新掌握了数据结构,而且还得到了用数据结构解决实际问题的宝贵经验。
其次,通过此次编程我也发现了自己在学习中的错误和不足,复习了以前学过的知识。
同时也学到了一些没学过的知识,让我从中收益非浅,也为期末考试准备了一下!
更重要的是培养了独立思考问题和解决问题的能力,熟悉了一些基本操作和解决问题的方法!
致谢
因为初次接触等原因此次设计遇到了许多问题,我深刻体会到老师发挥的重要作用,数据结构程序对我们来说比较难,在匆忙的学习中更是难上加难,似乎觉得自己仅是个匆匆过客,但在老师的帮助下我学会了如何调试,如何查找系统没有提示的错误,最后终于排除万难把程序搞定,体会到原来编程也挺有意思的快感.我想没有老师的帮助我很难在短期内把程序设计做的这样好,在此特地感谢老师的帮助。
参考文献
[1]李丽娟.C语言程序设计教程(第二版).北京:
人民邮电出版社2009
[2]刁成嘉.C语言程序设计论文[D].北京:
清华大学出版社2004
[3]杨文军,杨柳.C语言程序设计教程[M].北京:
清华大学出版社2010
[4]周启海.C语言程序设计报告[R].北京:
中国水利工程出版社2005
[5]谭浩强.C程序设计(第三版)[M].北京:
清华大学出版社2005
附录
源程序清单
#include<
stdio.h>
conio.h>
malloc.h>
string.h>
typedefstructSTUDENT
{
charstudentNumber[10];
/*学生学号*/
charstudentName[20];
/*学生姓名*/
charclassName[20];
/*班级名称*/
charyearName[20];
/*学期名称*/
floatmark1;
/*第1门成绩*/
floatmark2;
/*第2门成绩*/
floatmark3;
/*第3门成绩*/
structSTUDENT*next;
}STUDENT;
STUDENT*headLink;
/*链表表头指针*/
/*以下是函数声明*/
voidReadInfoFormFile(void);
voidDesplayMenu(void);
voidCreateHeadLink(void);
STUDENT*MallocNode(void);
voidGetInformation(STUDENT*t);
voidOutputInformation(void);
voidDesplayInfoBystudentName(void);
voidDesplayOneNode(STUDENT*t);
voidInsertOneNode(STUDENT*t);
voidDeleteNodeBystudentNumber(void);
voidChangeMarkByName(void);
voidChangeMarkByNumber(void);
voidSaveLinkToFile(void);
voidDesplayMarkSegment(void);
voidCompositorByTotalMark(void);
intchoose;
/*用于接受用户的选择*/
/*主函数*/
voidmain()
CreateHeadLink();
ReadInfoFormFile();
DesplayMenu();
/************************************
函数功能:
从文件中读学生信息到链表中
************************************/
voidReadInfoFormFile(void)
FILE*fp;
STUDENT*p;
fp=fopen("
student.txt"
"
r"
);
if(!
fp)
printf("
文件不存在\n"
return;
while(fscanf(fp,"
%s%s%s%f%f%f"
p->
studentNumber,p->
studentName,p->
className,&
(p->
mark1),&
mark2),&
mark3))>
0)
InsertOneNode(p);
fclose(fp);
显示菜单,根据用户的输入
完成相应的功能
voidDesplayMenu(void)
-------请选择相应功能------------\n\n"
|1按班级输出学生成绩单|\n"
|2按姓名查询|\n"
|3增加学生|\n"
|4删除学生|\n"
|5按班级修改学生成绩|\n"
|6按学期修改学生成绩|\n"
|7保存所有学生信息|\n"
|8显示不及格学生成绩|\n"
|9按平均成绩排序并输出绩|\n"
|10退出|\n\n"
scanf("
%d"
&
choose);
/*取得用户的选择*/
switch(choose)
case1:
/*显示所有学生的信息*/
case2:
/*先申请一个新结点*/
/*要求用户输入信息到新结点中*/
/*将新结点加到链表中*/
/*根据用户输入的学号删除该学生*/
/*根据用户输入的姓名修改学生成绩*/
/*根据用户输入的学号修改学生成绩*/
/*保存数据*/
/*显示不及格的学生成绩*/
/*按平均成绩排序*/
/*保存数据后再退出*/
free(headLink);
default:
/*递归调用*/
建立链表表头
voidCreateHeadLink(void)
p=(STUDENT*)malloc(sizeof(STUDENT));
headLink=p;
p->
next=NULL;
申请一个新结点,并将其初始化
STUDENT*MallocNode(void)
inti;
if(p==NULL)
returnNULL;
for(i=0;
i<
10;
i++)
studentNumber[i]='
\0'
;
20;
studentName[i]='
className[i]='
mark1=0.0;
mark2=0.0;
mark3=0.0;
returnp;
取得用户输入的学生信息
voidGetInformation(STUDENT*t)
请输入学生学号:
\n"
%s"
t->
studentNumber);
请输入学生姓名:
studentName);
请输入该生所在班级:
className);
请输入第1门成绩:
%f"
(t->
mark1));
请输入第2门成绩:
mark2));
请输入第3门成绩:
mark3));
在链表的结尾处增加一个结点
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成绩1\t成绩1\t成绩3\t总成绩\t平均成绩\n\n"
DesplayOneNode(p);
flag=1;
flag)
对不起,不存在姓名为%s的学生\n"
输出一个结点的信息
voidDesplayOneNode(STUDENT*t)
%s\t"
%.2f\t"
mark1);
mark2);
mark3);
mark1+t->
mark2+t->
%.2f\t\n"
(t->
mark3)/3);
根据用户输入的学号删除该学生
voidDeleteNodeBystudentNumber(void)
STUDENT*p,*q;
请输入要删除的学生学号:
"
studentNumber);
q=headLink->
while(q)
if(strcmp(q->
studentNumber,studentNumber)==0)
p->
next=q->
free(q);
flag=1;
p=p->
q=q->
if(!
不存在该学号的学生\n"
成功删除\n"
显示所有学生的信息
voidOutputInformation(void)
现在没有学生信息,请先输入学生信息\n\n"
根据输入的班级修改成绩
voidChangeMarkByName(void)
inta;
floatmark1,mark2,mark3;
请输入学生班级:
a);
请输入新的第1门成绩:
请输入新的第2门成绩:
请输入新的第3门成绩:
mark1=mark1;
mark2=mark2;
mark3=mark3;
修改成功\n"
对不起,不存在班级为%s的学生\n"
根据输入的学期修改成绩
voidChangeMarkByNumber(void)
intb;
charstudentNumber[20];
floatmark1,mar