C语言学生信息管理系统项目实训文档知识讲解.docx
- 文档编号:7353737
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:23
- 大小:111.41KB
C语言学生信息管理系统项目实训文档知识讲解.docx
《C语言学生信息管理系统项目实训文档知识讲解.docx》由会员分享,可在线阅读,更多相关《C语言学生信息管理系统项目实训文档知识讲解.docx(23页珍藏版)》请在冰点文库上搜索。
C语言学生信息管理系统项目实训文档知识讲解
广东交通职业技术学院
软件技术(可视化程序设计)专业
项目实训报告书
课程名称:
C语言程序设计课程设计
课程设计题目:
学生信息管理系统
课程设计日期:
2010年6月28日起7月3日止
小组成员:
姓名:
刘雁璋学号:
17号
指导教师:
万东老师
1摘要概述开发系统的目的、意义及主要功能
1.1我是软件班的学生,学习了C语言当然要活学活用啦!
C语言是一门比较基础的课程,虽然现在的社会已经很少用到,但是对我们学生来说还是有用的,因此我们要设计一个学生信息管理系统。
原因有几个:
一是能看出我们学习C语言的情况,二是能表现出我们的创新能力,因为这个系统已经有N多人设计过了,看看我们能否推陈出新。
三是我了完成我们的作业需要。
1.2随着科学技术的不断提高,计算机科学日渐成熟,其强大功能已为人们深刻认识,它已进入人们生活的各个领域,并发挥了越来越重要的作用,针对人工管理的缺点,最好的解决办法就是借助计算机技术提供一个电子化的课程设计管理平台,学生信息管理系统就因此诞生了!
1.3目的及意义:
学生信息管理系统是学校不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生信息管理系统应该能够为管理者提供充足的信息和快捷的查询手段.但是一直一来人们使用传统人工的方式管理文件信息,这种管理方式存在着许多缺点,如:
效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻的认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
作为计算机应用的一部分,使用计算机对学生信息进行管理,具有手工管理无法比拟的优点。
例如:
检索迅速、查找方便、可靠性强、存储量大、保密性好、寿命长、成本低等。
这些优点都能够极大地提高学生信息管理的效率,也是学校的科学化、正规化管理,与世界接轨的重要条件。
因此开发一套这样的管理系统成为很有必要的事情。
1.4功能简述:
(1)建立学生信息的结构体
(2)学生信息的初始化(可以从文件获取)
(3)学生信息的添加、修改、删除、查找
(4)学生信息的输出
(5)对学生信息按学号、成绩排序
(6)计算一门课的平均分和总分
(7)将学生信息保存为文件
综合应用数组、指针、结构体、文件等,对该设计题目进行设计和实现。
课程设计完成后,提交课程设计报告。
2需求分析
2.1学校每一学期到要考试,这就会有成绩的录入工作,用怎样的方法才能更好的,更快的,更轻松,更完美的把这种事情做好了?
这就要用到学生信息管理系统了。
学生信息管理系统能完成你想要的需求,改变了以前一些麻烦现状,化麻烦为轻松。
实现了快捷办公的需求。
2.2目前,学校学生管理是教务管理中的一个极为重要的环节,它是整个管理的核心和基础。
由于学校规模进一步扩大,学生人数逐年上升,学生情况的管理也变得越来越复杂。
面对如此繁杂的任务。
如果让个人去管理文档,就会显得费时费力。
尤其在管理成绩时,任务更加繁重,就成绩管理本身来说,它是一项任务繁重、时效性较强的系统工作,它不但涉及学生个人成绩查询,更涉及到各教师的工作效率和质量。
近年来随着计算机的迅速发展,计算机已经在社会各个领域显示了它巨大的作用。
毋庸置疑,切实有效地把计算机管理引入学校教务管理中,对于促进学校管理制度,提高学校教学质量与办学水平有着显著意义。
3软件开发工具与环境概述
3.1开发工具:
TurboC2.0/visualC6.0
3.2运行环境:
硬件环境:
现在的计算机硬件基本上都支持,因为本系统小,可行性高,几乎能在所有计算机上运行。
操作系统:
Windows98/2000/XP/win7等可以
4概要设计
a)用户接口设计
4.1用户接口:
本系统支持在DOS环境下运行。
4.2内部接口:
系统内部模块之间采用直接调用的方式,所有的参数传递通过函数调用的方式运行。
4.3出错信息:
当系统运行过程中出现错误时,将给出相关的错误信息。
b)模块说明
(一)输入学生成绩
(二)浏览学生成绩
(三)修改学生成绩
(四)删除学生成绩
(五)排序学生成绩
(六)查找学生成绩
(七)安全退出系统
c)数据结构设计
本程序采用链表结构实现存放学生信息,链表结构图如下
d)菜单设计
用switch语句对学生信息进行选择性的编辑
a)当用户输入!
时,进入菜单选择;
b)当用户输入1时,创建新的学生信息,并输出链表中的全部信息。
c)当用户输入2时,浏览学生信息,可以查看所有学生的信息;
d)当用户输入3时,修改学生的信息,按学号或姓名修改;
e)当用户输入4时,删除学生信息;
f)当用户输入5时,排序学生信息,选择按学号或总分排序;
g)当用户输入6时,查找学生信息,按学号或姓名查找;
h)当用户输入7时,保存学生信息;
i)当用户输入8时,退出系统。
e)系统结构图
5详细设计
2.主函数模块的流程图
2.功能模块与程序的关系
程序1
程序2
程序3
程序4
程序5
程序6
创建
Creat
while
if
浏览
Display
修改、插入
Insert
删除
Del
排序
Paixu
查找
Find
保存
Load
退出
Sexit
1.每个模块的详细设计
a)创建学生信息链表
Ø函数原型、功能和形参说明
1.函数原型:
student*creat()
2.函数功能:
创建基础数据函数,并带回一个指向链表头的指针
3.参数说明:
student*head链表头结点指针
4.核心程序:
student*creat()
{nti;
structstudent*head,*p1,*p2;
p1=p2=(structstudent*)malloc(LEN);
n=0;
p1->total=p1->score[0]+p1->score[1]+p1->score[2]+p1->score[3];
if(n==0)head=p1;
elsep2->next=p1;
p2=p1;
n++;
}
b)学生信息的保存
Ø函数原型、功能和形参说明
1.函数原型:
save(student*head)
2.函数功能:
以文件的形式保存数据
3.参数说明:
student*head链表头结点指针
Ø核心程序:
save(student*head)
{FILE*fp;
student*p;
if((fp=fopen("d:
\\STU_LIST","wb"))==null)
{printf("Cannotopenthefile!
\n");
return;}
printf("\nSaveingthefile!
\n");
p=head;
while(p!
=null)
{fwrite(p,LEN,1,fp);
p=p->next;}
fclose(fp);}
c)输出链表函数
Ø函数原型、功能和形参说明
1.函数原型:
output(student*head)
2.函数功能:
输出链表函数
3.参数说明:
student*head链表头结点指针
Ø核心程序:
output(student*head)
{student*p;
p=head;
if(head!
=NULL)
do{printf("%8ld%6s%4s%2d%2d%2d%2d%-.2f%3d\n",p->id,p->name,p->sex,p->score[0],p->score[1],p->score[2],p->score[3],p->total/4.0,p->total);
printf("-----------------------------------------------------------------------\n");
p=p->next;
}while(p!
=NULL);
}
}
d)修改结点函数
函数原型、功能和形参说明
1.函数原型:
structstudent*insert(structstudent*head)
2.函数功能:
修改学生的信息
3.参数说明:
student*head
核心程序:
structstudent*insert(structstudent*head)
structstudent*p1,*p2,*p3;
printf("请输入修改信息!
\n");
p1=(structstudent*)malloc(LEN);
p1->total=p1->score[0]+p1->score[1]+p1->score[2]+p1->score[3];/*计算总分*/
p2=head;
if(head==NULL)
{head=p1;p1->next=NULL;}
else{while((p1->id>p2->id)&&(p2->next!
=NULL))
{p3=p2;
p2=p2->next;}
if(p1->id<=p2->id)
{if(head==p2){p1->next=head;head=p1;}
else{p3->next=p1;p1->next=p2;}
}
else{p2->next=p1;p1->next=NULL;}
}
n++;
return(head);
}
e)删除结点函数
Ø函数原型、功能和形参说明
1.函数原型:
structstudent*delete(structstudent*head,longintnum)
2.函数功能:
删除学生的信息
3.参数说明:
student*head链表头结点指针
核心程序:
{structstudent*p1,*p2;
printf("要删除的学生准考证号为:
%ld\n",num);
if(head==NULL)
{printf("这是一个空表,没有可删除的学生准考证号!
\n");return(head);}
else{p1=head;
while(num!
=p1->id&&p1->next!
=NULL)
{p2=p1;p1=p1->next;}
if(num==p1->id)
{if(p1==head)head=p1->next;
elsep2->next=p1->next;
printf("删除准考证号为%ld的学生\n",num);
n--;}
elseprintf("没找到准考证号为%ld的学生!
\n",num);
return(head);
}
}
Ø
f)排序函数
Ø函数原型、功能和形参说明
1.函数原型:
paixu(structstudent*head)
2.函数功能:
对学生成绩排序
3.参数说明:
student*head链表头结点指针
Ø核心程序:
……
p1=head;
for(k=0;k {p[k]=p1;p1=p1->next;} for(k=0;k for(j=k+1;j if(p[k]->total total) {p2=p[k];p[k]=p[j];p[j]=p2;} } …… g)计算平均分函数 Ø函数原型、功能和形参说明 1.函数原型: dkarg(structstudent*head) 2.函数功能: 计算出学生各科成绩总分和平均分 3.参数说明: student*head链表头结点指针 Ø核心程序: p1=head; for(k=0;k {arg1+=p1->score[0]; arg2+=p1->score[1]; arg3+=p1->score[2]; arg4+=p1->score[3]; p1=p1->next;} arg1/=m;arg2/=m;arg3/=m;arg4/=m; h)读取信息 Ø函数原型、功能和形参说明 5.函数原型: student*load() 6.函数功能: 将文件从磁盘中读出 7.参数说明: Ø核心程序: …… if(fread(p,LEN,n,fp)! =1) { if(feof(fp)) { fclose(fp); return(p); } } …… i)查找 Ø函数原型、功能和形参说明 函数原型: structstudent*find(structstudent*head,longintnum) Ø函数功能: 根据用户输入的学生姓名进行查找,并将结果输出 Ø参数说明: student*head,longintnum Ø核心程序: …… ……structstudent*p1; printf("要查找的学生准考证号为: %ld\n",num); if(head==NULL) {printf("这是一个空表,没有要查找的学生准考证号! \n");return(head);} else{p1=head; while(num! =p1->id&&p1->next! =NULL) {p1=p1->next;} 6系统测试 本学生信息管理系统能够完成一定的应用要求,不足的地方还有很多,如功能还不够多,还是需要添加的,系统有点寒酸,没有设计好的界面,但是还是可以用的。 (1)能够通过编译时出现的出错提示信息,进行初步的纠错。 (2)完成一个程序的一般步骤为设计,录入,编译,如果出错,则修改,然后再编译,编译成功后,看看结果是否正确,如果结果不正确,则再重复以上步骤。 7结束语 这次的课程设计完全是自己第一次接触程序设计的整个过程。 以前只是看书,还不曾写过代码,这次要自己写还真是有点难度,于是就去看书,不会在上网找资料,看看别人是怎么写的,然后在自己实实在在的编写自己的程序。 程序并不是那么的复杂,写出来后才感到设计一个软件还真是不简单。 要按照一个固定的流程去完成这次课程设计,这也是开发软件所必需的步骤。 确实规范的编一个系统是比较长时间的没有耐心是做不出来的。 在学习的过程中有让我进一步了解自己能力的不足,所以要及时去学习自己需要的知识,要掌握一门语言是经过多次实践的,没有一定的实战演练,再厉害也只能是纸上谈兵。 程序的设计是一个系统的工程,需要我们掌握多方面的知识。 在这次课程设计中,我觉得自己的知识面还是有欠缺的。 需要在以后的学习中加以注意,要全面的提高自己的知识面与知识层次。 通过这次的课程设计,我的编程能力得到了一定的提高,当然调试程度的能力也相应的提高,从中体会到: 编程一定要细心,哪怕是一个小点和空格都可以决定你这个程度能不能运行。 在做这个程序时遇到的困难还是挺多的,就是因为我以前学的比较少,所以遇到的困难比其它同学都要多,但我经过自己去上网查和去图书馆查资料书,自己解决了一小部分问题,大学不像是高中,大学大部分是靠自己自学的,要求大学生要有一定的自学能力就是这样的道理,老师都只是在课堂上讲一些理论上的东西,剩下的都是靠自己去学习去扩展。 这个程度中吸取了不少别人的东西,在这用别人的东西的同时我从中也吸取了里面有用的东西,从而使自己的理论知识有了一定的增长,鲁迅的“拿来主义”就是这个道理,老师也说: 抄别人的东西要会抄,抄后要知其所以然。 我在抄他们的程序的同时也在学习,学习为什么要这样。 在编程的过程中,我体会到编程是十分辛苦的。 在课程设计这一段时间里,我每天的生活基本是在不断的调试程序和修改代码中完成的。 有时,这种生活令人感到乏味和疲倦,但是在这种近似枯燥的生活中,我的编程水平有了一定程度的提高,这是课程设计中我最大的收获。 课程设计已经基本上完成了,但在课程设计的这些体会要应用到今后的日常学习中去。 在新的学期,我觉得自己要在以下几个方面加以注意: 首先,在学习专业课的时候要注意理论联系实际。 注意将课本上的知识应用到日常的操作中,真正做到学以致用。 只有这样,才能做到目的明确,才能有足够的学习动力。 其次,在学习过程中要经常与同学进行交流,讨论所遇到的问题,并一起解决。 在讨论中解决问题,会节约很多时间,并且在交流的过程中,我们也可以学到更多的东西。 这次课程设计带给自己很多体会,在以后的学习中要不断总结,不断改进,使自己的成绩有新的提高。 8附程序源代码 #include"stdlib.h" #include"string.h" #include"stdio.h" #defineNULL0 #defineQ10 #defineLENsizeof(structstudent) structstudent {charname[Q]; charsex[Q]; longid; intscore[4]; inttotal; intm_c; structstudent*next; }; intn; charch[Q]; structstudent*creat() {inti; structstudent*head,*p1,*p2; p1=p2=(structstudent*)malloc(LEN); n=0; printf("请输入学生考试信息! \n"); printf("请在姓名处键以\"! \"结束输入。 \n"); scanf("%s",ch); head=NULL; if(ch! ="! ") {p1=(structstudent*)malloc(LEN); strcpy(p1->name,ch); printf("姓名: "); scanf("%s",p1->name); printf("性别: "); scanf("%s",p1->sex); printf("准考证号(8位): "); scanf("%ld",&p1->id); printf("数据结构成绩(0-100): "); scanf("%d",&p1->score[0]); printf("操作系统成绩(0-100): "); scanf("%d",&p1->score[1]); printf("英语成绩(0-100): "); scanf("%d",&p1->score[2]); printf("C语言成绩(0-100): "); scanf("%d",&p1->score[3]); p1->total=p1->score[0]+p1->score[1]+p1->score[2]+p1->score[3]; if(n==0)head=p1; elsep2->next=p1; p2=p1; n++; } p2->next=NULL; return(head); } voidoutput(structstudent*head) {structstudent*p; printf("-----------------------------------------------------------------------\n"); printf("*学生考试成绩信息表*\n"); printf("-----------------------------------------------------------------------\n"); printf("准考证号姓名性别数据结构操作系统英语C语言平均分总分\n"); printf("-----------------------------------------------------------------------\n"); p=head; if(head! =NULL) do{printf("%8ld%6s%4s%2d%2d%2d%2d%-.2f%3d\n",p->id,p->name,p->sex,p->score[0],p->score[1],p->score[2],p->score[3],p->total/4.0,p->total); printf("-----------------------------------------------------------------------\n"); p=p->next; }while(p! =NULL); } count(structstudent*head) {if(head==NULL)return(0); elsereturn(1+count(head->next)); } structstudent*insert(structstudent*head) {structstudent*p1,*p2,*p3; printf("请输入修改信息! \n"); p1=(structstudent*)malloc(LEN); printf("准考证号(8位): "); scanf("%ld",&p1->id); printf("姓名: "); scanf("%s",p1->name); printf("性别: "); scanf("%s",p1->sex); printf("数据结构成绩: "); scanf("%d",&p1->score[0]); printf("操作系统成绩: "); scanf("%d",&p1->score[1]); printf("英语成绩: "); scanf("%d",&p1->score[2]); printf("C语言成绩: "); scanf("%d",&p1->score[3]); p1->total=p1->score[0]+p1->score[1]+p1->score[2]+p1->score[3];/*计算总分*/ p2=head; if(head==NULL) {head=p1;p1->next=NULL;} else{while((p1->id>p2->id)&&(p2->next! =NULL)) {p3=p2; p2=p2->next;} if(p1->id<=p2->id) {if(head==p2){p1->next=head;head=p1;} else{p3->next=p1;p1->next=p2;} } else{p2->next=p1;p1->next=N
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 学生 信息管理 系统 项目 文档 知识 讲解
![提示](https://static.bingdoc.com/images/bang_tan.gif)