C语言课设绝对原创内容.docx
《C语言课设绝对原创内容.docx》由会员分享,可在线阅读,更多相关《C语言课设绝对原创内容.docx(26页珍藏版)》请在冰点文库上搜索。
C语言课设绝对原创内容
第一章绪论
1.1选题背景
随着社会的发展及知识经济时代的到来,管理信息系统在各行各业发挥着越来越重要的作用。
但在高校的教务管理中,避免了手工操作而带来的一些不必要的问题。
1.2系统目标
本系统的目标是将高校教务的学生管理工作实现计算机管理,从而大幅度提高工作效率,提高实施管理的准确性、科学性;使担负管理的工作人员从繁杂的手工劳作中解脱出来,更好实施针对学生管理在管理在手工操作遇到的问题。
1.3系统目的
通过本项课程设计,可以培养独立思考、综合运用所学有关相应知识的能力,能更好的巩固《C语言程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!
更加了解了c语言的好处和其可用性!
通过C语言课程设计,使学生了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。
为后续各门计算机课程的学习和毕业设计打下坚实基础。
第二章问题定义
2.1可行性分析
1.社会可行性分析
目前社会上信息管理系统发展飞快,教务管理信息系统也是有了很大的发展。
本系统完全独立开发,力求使系统功能简明,但功能全易操作。
它适应了时代发展,适应了我国教育深化改革、全面实施素质教育的需要。
2.技术可行性
从技术角度分析,这项开发工作所涉及的专业技术如下:
操作系统采用Windows2000以上的版本;在数据管理系统上,我们可采用了MicrosoftOffice,开发工具选用MicrosoftVC++6.0
3.经济可行性
采用计算机管理不但可以提高工作效率,而且还可以节省人力、物力、财力,降低了人工处理产生的错误。
2.2详细调查
组织结构图
第三章总体设计与详细设计
3.1程序图
结束
3.2详细设计:
管理在校的所有学生信息,能实现录入新的学生信息;删除离校学生信息;修改学生信息,查询学生信息等操作。
在主函数中,有两个基本部分,首先是建立一个初始的表格空间作为一个作用域,其次建立一个循环结构作为返回功能表。
在循环函数中,设计一个switch结构来选择功能,功能包括:
菜单函数,输出显示全部记录函数,查询某个记录函数,增加某个记录函数,改变某个记录函数,删除某个记录函数,退出函数。
在选择相应模块后,进入相应的模块进行操作。
这样不仅使操作速度提高,使操作方便快捷,又提高了操作的效率。
(1)添加操作
系统向数据库中添加一条新的记录,并修改相关表的信息(如在添加学生调动信息时,系统将自动修改学生的基本信息)
(2)查询操作
系统根据查询条件在数据库中进行查询,然后将查询结果显示在界面上。
(3)修改操作
要进行修改操作,必须先执行查询操作,执行修改操作系统将更新数据库中的相应记录。
(4)删除操作
要进行删除操作,必须先执行查询操作,执行删除操作系统将删除数据库中的相应记录。
第四章编码实现
本学生管理系统大致分为五个部分:
(1)学生信息查询模块在学生信息管理模块中,用户根据需要可根据已有选项查询各种条件的学生。
本模块使用Node*p语句定义查询学生信息,并利用if语句查找。
if(sel==1)/*学号*/
printf("请你输入要查找的学号:
");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
(2)学生信息添加模块添加新的学生信息,并可以设置权限。
本模块使用Node*p,*r,*s;定义增加学生信息,并利用指向运算添加学生信息。
Node*p,*r,*s;
charnum[10];
r=l;
s=l->next;
while(r->next!
=NULL)
r=r->next;
(3)学生信息修改模块有修改学生的个人信息功能。
使用voidModify(Linkl)语句定义修改模块。
利用指针调用被修改内容。
(4)学生信息删除模块删除不需要的学生信息。
使用voidDel(Linkl)定义删除学生信息。
printf("请你输入要删除的学号:
");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
(5)学生信息保存模块保存修改后的学生信息。
学生信息管理系统需要实现的功能主要有三大块:
“学生基本信息管理”、“学生查询”和“系统管理”模块。
其中学生管理是整个系统的核心。
第五章调试与测试
在VisualC++6.0运行结果:
登记学生资料运行结果:
图5-1
查找学生资料运行结果
图5-2
修改学生资料运行结果
图5-3
删除学生资料运行结果
图5-4
保存学生资料运行结果
图5-5
第六章总结与心得
课程设计是培养学生综合运用所学知识、发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。
因此作为二十一世纪的大学生来说掌握计算机开发技术是十分重要的。
回顾起此次课程设计,至今我仍感慨颇多,的确,从拿到题目到完成整个编程,从理论到实践,在整整半个月的日子里,学到了很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体……通过这次课程设计之后,一定把以前所学过的知识重新温故。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下,终于游逆而解。
同时,在老师的指导中我学得到很多实用的知识,在此我表示感谢!
同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!
附录:
源代码:
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
intshoudsave=0;/**/
structstudent
{
charnum[10];/*学号*/
charname[20];
charclass[10];
charterm[2];
intygrade;
intcgrade;
intmgrade;
integrade;
inttotle;
intave;
charneartime[10];/*最近更新时间*/
};
typedefstructnode
{
structstudentdata;
structnode*next;
}Node,*Link;
voidmenu()
{
printf("***********************************************************");
printf("\t1登记学生资料\t\t\t\t\t2删除学生资料\n");
printf("\t3查询学生资料\t\t\t\t\t4修改学生资料\n");
printf("\t5保存学生资料\t\t\t\t\t0退出系统\n");
printf("**********************************************************\n");
}
voidprintstart()
{
printf("-------------------------------------------------------------------\n");
}
voidWrong()
{
printf("\n=====>提示:
输入错误!
\n");
}
voidNofind()
{
printf("\n=====>提示:
没有找到该学生!
\n");
}
voidprintc()/*本函数用于输出中文*/
{
printf("学号\t姓名班级学期语言成绩英语成绩数学成绩C语言成绩总分平均分\n");
}
voidprinte(Node*p)/*本函数用于输出英文*/
{
printf("%-12s%s\t%s\t\%s\t%d\t%d\t%d\t%d\t%d\n",p->data.num,p->data.name,p->data.class,p->data.term,p->data.ygrade,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.totle,p->data.ave);
}
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;
}
}
elseif(strcmp(nameornum,"name")==0)/*按姓名查询*/
{
r=l->next;
while(r!
=NULL)
{
if(strcmp(r->data.name,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("请你输入学号(以'0'返回上一级菜单:
)");
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.class);
getchar();
printf("请你输入学期:
");
scanf("%s",p->data.term);
getchar();
printf("请你输入语文成绩:
");
scanf("%d",&p->data.ygrade);
getchar();
printf("请你输入c语言成绩:
");
scanf("%d",&p->data.cgrade);
getchar();
printf("请你输入数学成绩:
");
scanf("%d",&p->data.mgrade);
getchar();
printf("请你输入英语成绩:
");
scanf("%d",&p->data.egrade);
getchar();
p->data.totle=p->data.ygrade+p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle/3;
/*信息输入已经完成*/
p->next=NULL;
r->next=p;
r=p;
shoudsave=1;
}
}
voidQur(Linkl)/*查询学生*/
{
intsel;
charfindmess[20];
Node*p;
if(!
l->next)
{
printf("\n=====>提示:
没有资料可以查询!
\n");
return;
}
printf("\n=====>1按学号查找\n=====>2按姓名查找\n");
scanf("%d",&sel);
if(sel==1)/*学号*/
{
printf("请你输入要查找的学号:
");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("\t\t\t\t查找结果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
elseif(sel==2)/*姓名*/
{
printf("请你输入要查找的姓名:
");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
printf("\t\t\t\t查找结果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else
Wrong();
}
voidDel(Linkl)/*删除*/
{
intsel;
Node*p,*r;
charfindmess[20];
if(!
l->next)
{
printf("\n=====>提示:
没有资料可以删除!
\n");
return;
}
printf("\n=====>1按学号删除\n=====>2按姓名删除\n");
scanf("%d",&sel);
if(sel==1)
{
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();
}
elseif(sel==2)
{
printf("请你输入要删除的姓名:
");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
r=l;
while(r->next!
=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:
该学生已经成功删除!
\n");
shoudsave=1;
}
else
Nofind();
}
else
Wrong();
}
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("请你输入新学号(原来是%s):
",p->data.num);
scanf("%s",p->data.num);
printf("请你输入新姓名(原来是%s):
",p->data.name);
scanf("%s",p->data.name);
getchar();
printf("请你输入新班级(原来是%s):
",p->data.class);
scanf("%s",p->data.class);
getch();
printf("请你输入新学期(原来是%s):
",p->data.term);
scanf("%s",p->data.term);
getchar();
printf("请你输入新的语文成绩(原来是%d分):
",p->data.ygrade);
scanf("%d",&p->data.ygrade);
getchar();
printf("请你输入新的c语言成绩(原来是%d分):
",p->data.cgrade);
scanf("%d",&p->data.cgrade);
getchar();
printf("请你输入新的数学成绩(原来是%d分):
",p->data.mgrade);
scanf("%d",&p->data.mgrade);
getchar();
printf("请你输入新的英语成绩(原来是%d分):
",p->data.egrade);
scanf("%d",&p->data.egrade);
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle/3;
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");
}
voidTongji(Linkl)
{
Node*pm,*pe,*pc,*pa;/*用于指向不及格学生的接点*/
Node*r=l->next;
if(!
r)
{
printf("\n=====>提示:
没有资料可以统计!
\n");
return;
}
pm=pe=pc=pa=r;
while(r!
=NULL)
{
if(r->data.ygrade<60)
pa=r;
if(r->data.cgrade<60)
pc=r;
if(r->data.mgrade<60)
pm=r;
if(r->data.egrade<60)
pe=r;
r=r->next;
}
printf("------------------------------统计结果--------------------------------\n");
printf("语文不及格:
\t%s%d分\n",pe->data.name,pe->data.ygrade);
printf("英语不及格:
\t%s%d分\n",pe->data.name,pe->data.egrade);
printf("数学不及格:
\t%s%d分\n",pm->data.name,pm->data.mgrade);
printf("c语言不及格:
\t%s%d分\n",pc->data.name,pc->data.cgrade);
printstart();
}
voidSort(Linkl)
{
Linkll;
Node*p,*rr,*s;
ll=(Link)malloc(sizeof(Node));/*用于做新的连表*/
ll->next=NULL;
if(l->next==NULL)
{
printf("\n=====>提示:
没有资料可以排序!
\n");
return;
}
p=l->next;
while(p)
{
s=(Node*)malloc(sizeof(Node));/*新建接点用于保存信息*/
s->data=p->data;
s->next=NULL;
rr=ll;
while(rr->next!
=NULL&&rr->next->data.totle>=p->data.totle)
rr=rr->next;
if(rr->next==NULL)
rr->next=s;
else
{
s->next=rr->next;
rr->next=s;
}
p=p->next;
}
free(l);
l->next=ll->next;
printf("\n=====>提示:
排序已经完成!
\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;
No