学生学籍管理系统 课程设计10.docx
《学生学籍管理系统 课程设计10.docx》由会员分享,可在线阅读,更多相关《学生学籍管理系统 课程设计10.docx(29页珍藏版)》请在冰点文库上搜索。
学生学籍管理系统课程设计10
软件设计报告
题目:
学生学籍管理系统
院系名称
:
电子工程学院
专业名称
:
电子信息工程
班级
:
班内序号
:
学生姓名
:
指导教师
:
时间
:
2010年6月7日至2010年6月18日
一、课程设计目的
1.熟悉C语言程序的编辑、编译链接和运行的过程,至少能够用一种编译器较熟练地编辑、编译及调试程序。
2.掌握C语言数据类型,如何定义一个整型,如何将整形强制转换为实形以及对它们赋值的方法。
3.熟练运用if语句和switch语句以及嵌套应用。
涉及循环调用的,了解并掌握三种控制语句while、do-while和for语句。
4.学习并掌握C语言定义函数的基本方法、声明函数及调用函数的方法和过程。
5.掌握文件和文件指针的概念以及文件的定义方法,认识文件打开、关闭、读、写等文件基本操作函数。
6.掌握结构体类型变量、数组的定义和使用。
7.掌握链表的使用,及函数的调用。
二、课程设计内容简介
学生成绩管理主要功能:
(1)能按学号完成对学生信息的录入、修改、插入以及删除。
(2)能按学生的学号大小对学生进行排序。
(3)能根据学号、姓名查询学生信息。
三、需求分析
系统功能:
(1)能按学号对学生的信息进行录入、修改、删除、插入
(2)。
能根据学生的学号进行排序
(3)能查询学生学号,姓名,出生年月日,性别,地址,电话。
(4)能按学号、姓名查询学生各个信息
(5)可以保存到文件(附加功能)
(6)可以从文件读入已有的文件(附加功能)
(7)以菜单方式工作
性能描述:
各种功能都可以满足;程序相对较小,因而运行时反应比较迅速,不存在响应不及时地问题。
四、总体设计
1.学生成绩管理系统模块图
2.程序可以满足以下功能:
1.各模块间通过菜单切换和调用
2.主函数通过调用菜单函数实现对各功能模块的调用,各功能模块间根据需要可相互调用。
3.程序能够保证各模块功能的独立和数据共享。
4.安全需要,需输入密码进入系统。
。
(1)模块流程图:
输入模块:
输入学生的各种信息,并保存到文件中。
输出模块:
输出学生的信息,与输入的过程相反。
排序模块:
按学号排序
查找删除模块:
添加模块:
(2)主要函数说明:
a)主函数(main):
调用各功能模块。
b)密码验证模块(login()):
要求用户输入正确密码,对用户身份进行验证,保证数据安全。
c)读取信息模块(read_inf):
将已存入E:
\\chengji.txt的学生信息调入主函数;
d)保存信息模块(save_inf):
将从输入信息模块(input_message)输入的学生信息存入E:
\\chengji.txt
e)创建信息模块(creat):
创建链表,录入学生信息,并返回头指针。
f)输出信息模块(printf_inf):
显示输入的和已存学生信息;
g)学生查询修改模块(searchcorrect):
1)按姓名查询:
searchbynum
2)按学号查询:
searchbyname
修改查询信息,否则退出修改
h)统计信息模块(count_message):
统计学生数量。
i)信息排序模块(sort):
按学生学号进行排序。
六、调试情况,设计技巧及体会
1、对自己设计进行评价,指出合理和不足之处,提出改进的方案。
这个程序的主要功能包括录入、浏览、排序、查询、修改、删除、统计、保存、版本信息、退出。
我自己认为都可以,就是程序的登录系统有点简单。
还有一点就是删除模块太简单,一次只能删除一个人的信息,而且是全部删除,不能选择删除某一个信息,有待改进。
2、在设计过程中的感受。
刚开始,头脑里没有任何思路,不知道如何下手,经过仔细研读例题后,终于有了思绪,先编小模块:
输入,输出,查询等,再编比较大的模块,我觉得所有模块中最难编的就是删除和更改模块,苦思冥想,再加上老师和例题的帮助,总算做出来了,但是非常复杂。
在编译的过程中总会出现五花八门的错误,比如:
输出的学生信息不是原先输入的信息,有错误信息,或者是乱码等。
后来才发现原来是定义的空间不够大,字符之间没有隔开,经过改正之后果然正确了。
改正完后,当把所有的小块连接在一起时,虽然没有错误,但是总有许多警告语句,运行的结果也不尽人意。
通过老师的提示后才发现原来是自己的定义有问题。
经过两个星期的上机实践学习,我才发现我的C语言上机实践能力很差,有待进步。
以后不但要重视课本与习题,更要重视上机实践。
七、源程序清单和执行结果:
(交电子文档)
运行结果如下:
源程序如下:
#include
#include
#include
#defineNsizeof(structnode)
structnode/*学生信息*/
{
charname[10];
charnum[10];
charsex[5];
intage;
charaddress[20];
structnode*next;
};
structnode*creat()/*创建链表*/
{
structnode*head,*p1,*p2;
charchoice;
head=(structnode*)malloc(N);
p2=head;
do
{p1=(structnode*)malloc(N);
printf("pleaseinputtheinfo:
\n");
printf("---------------------\n");
printf("请输入学生姓名:
\n");
scanf("%s",p1->name);
printf("请输入学生学号:
\n");
scanf("%s",p1->num);
printf("请输入学生性别:
\n");
scanf("%s",p1->sex);
printf("请输入学生年龄:
\n");
scanf("%d",&p1->age);
printf("请输入学生住址:
\n");
scanf("%s",p1->address);
flushall();
p2->next=p1;
p2=p1;
printf("是否继续?
(y/n?
)");
choice=getchar();
}while(choice=='y');
p2->next=NULL;
return(head);
}
voidsearchbynum(structnode*p0)/*按学号查找*/
{charnum[10];
printf("请输入要查找的学号:
");
scanf("%s",num);
while(p0->next!
=NULL)
{
p0=p0->next;
if(strcmp(p0->num,num)==0)
{
printf("姓名学号性别年龄住址\n");
printf("%s%s%s%d%s\n",p0->name,p0->num,p0->sex,p0->age,p0->address);
}
}
printf("无该学生信息\n");
}
voidsearchbyname(structnode*p0)/*按姓名查找*/
{charname[10];
printf("请输入要查找学生的姓名:
");
scanf("%s",name);
while(p0->next!
=NULL)
{
p0=p0->next;
if(strcmp(p0->name,name)==0)
{
printf("姓名学号性别年龄住址\n");
printf("%s%s%s%d%s\n",p0->name,p0->num,p0->sex,p0->age,p0->address);
}
}
printf("无该学生信息\n");
}
voidsearchcorrect(structnode*p)/*查找修改信息*/
{
structnode*p0;
intchoice;
while
(1)
{
p0=p;
printf("请输入要查找的信息\n");
printf("1.按学号查找\n");
printf("2.按姓名查找\n");
printf("---------------");
scanf("%d",&choice);
switch(choice)
{
case1:
searchbynum(p0);break;
case2:
searchbyname(p0);break;
}
printf("是否对学生信息进行修改?
(y/n)");
getchar();
if(getchar()=='y')
{
printf("请输入学生新的信息!
");
printf("---------------------\n");
printf("请输入学生姓名:
\n");
scanf("%s",p0->name);
printf("请输入学生学号:
\n");
scanf("%s",p0->num);
printf("请输入学生性别:
\n");
scanf("%s",p0->sex);
printf("请输入学生年龄:
\n");
scanf("%d",&p0->age);
printf("请输入学生住址:
\n");
scanf("%s",p0->address);
}
printf("是否继续查找?
(y/n)");
getchar();
if(getchar()=='n')
break;
}
}
voiddelete_inf(structnode*head)/*删除信息*/
{
charnum[10];
charname[10];
structnode*p,*p0;
intchoice;
p0=head;
p=p0->next;
if(p==NULL)
printf("无该学生信息!
!
");
while
(1)
{
printf("输入要删除的信息:
");
printf("1.学号2.姓名\n");
scanf("%d",&choice);
if(choice==1)
{
printf("输入删除学号:
\n");
scanf("%s",num);
p0=head;
p=p0->next;
while(p!
=NULL)
{
if(strcmp(p->num,num)==0)
{
p0->next=p->next;
printf("姓名学号性别年龄住址\n");
printf("%s%s%s%d%s\n",p->name,p->num,p->sex,p->age,p->address);
printf("确认删除吗?
(y/n)");
getchar();
if(getchar()=='n')
break;
else
{
free(p);
printf("删除成功!
!
");
break;
}
}
else
{
p0=p;
p=p->next;
if(p==NULL)
printf("无该学生信息!
!
");
}
}
}
elseif(choice==2)
{
printf("输入删除学生姓名:
\n");
scanf("%s",name);
p0=head;
p=p0->next;
while(p!
=NULL)
{
if(strcmp(p->name,name)==0)
{
p0->next=p->next;
printf("姓名学号性别年龄住址\n");
printf("%s%s%s%d%s\n",p->name,p->num,p->sex,p->age,p->address);
printf("确认删除吗?
(y/n)");
getchar();
if(getchar()=='n')
break;
else
{
free(p);
printf("删除成功!
!
");
break;
}
}
else
{
p0=p;
p=p->next;
if(p==NULL)
printf("无该学生信息!
!
");
}
}
}
printf("是否继续删除?
(y/n)");
getchar();
if(getchar()=='n')
break;
}
}
voidadd_inf(structnode*head)/*添加信息*/
{
while
(1)
{structnode*p;
p=(structnode*)malloc(N);
printf("请输入添加学生的信息!
");
printf("---------------------\n");
printf("请输入学生姓名:
\n");
scanf("%s",p->name);
printf("请输入学生学号:
\n");
scanf("%s",p->num);
printf("请输入学生性别:
\n");
scanf("%s",p->sex);
printf("请输入学生年龄:
\n");
scanf("%d",&p->age);
printf("请输入学生住址:
\n");
scanf("%s",p->address);
p->next=head->next;
head->next=p;
printf("是否继续添加?
(y/n)");
getchar();
if(getchar()=='n')
break;
}
}
voidsave_inf(structnode*h)/*链表信息存入文件*/
{
structnode*stu;
FILE*fp;
if((fp=fopen("E:
\\chengji.txt","wt"))==NULL)
{
printf("写文件出错,按任意键退出!
");
getchar();
exit
(1);
}
for(stu=h->next;stu->next!
=NULL;stu=stu->next)
{
fwrite(stu,N,1,fp);
}
printf("\n文件已保存!
按任意键返回");
getchar();
fclose(fp);
}
structnode*read_inf()/*文件信息存入链表*/
{
structnode*head,*r,*stu;
FILE*fp;
if((fp=fopen("E:
/chengji.txt","rt"))==NULL)
{
printf("文件未建立!
");
return(0);
}
head=(structnode*)malloc(N);
head->next=NULL;
r=head;
while(!
feof(fp))
{
stu=(structnode*)malloc(N);
fread(stu,N,1,fp);
r->next=stu;
r=stu;
}
r->next=NULL;
fclose(fp);
printf("读取文件成功!
");
getchar();
returnhead;
}
printf_inf(structnode*head)/*打印数据*/
{
structnode*stu;
printf("\n该学生信息为:
\n");
printf("姓名学号性别年龄住址\n");
printf("--------------------------------------------------------------------\n");
for(stu=head->next;stu->next!
=NULL;stu=stu->next)
printf("%s%s%s%d%s\n",stu->name,stu->num,stu->sex,stu->age,stu->address);
printf("\n按任意键返回");
getchar();
}
voidlogin()//密码
{
charname[10];
charp;
chars[9];
inti;
printf("用户名:
");
flushall();
gets(name);
printf("密码:
");
for(i=0;i<8;i++)
{
p=getch();
printf("*");
s[i]=p;
}
s[8]='\0';
printf("\n");
if(!
(strcmp(s,"88888888")))
{
system("cls");
printf("\n\n\n\n\n\n\n\n\n您已成功登陆!
");
}
else
{
system("cls");
printf("\n\n\n\n\n\n\n\n\n密码错误,您无权使用该系统!
\n\n");
exit
(1);
}
}
voidSort(structnode*head)//排序
{structnode*First,*Last;
chart[10];
intp;
First=head->next;
while(First->next!
=NULL)
{
Last=First->next;
while(Last!
=NULL)
{
if(strcmp(First->num,Last->num)>0)
{
strcpy(t,First->name);
strcpy(First->name,Last->name);
strcpy(Last->name,t);
strcpy(t,First->num);
strcpy(First->num,Last->num);
strcpy(Last->num,t);
strcpy(t,First->sex);
strcpy(First->sex,Last->sex);
strcpy(Last->sex,t);
strcpy(t,First->address);
strcpy(First->address,Last->address);
strcpy(Last->address,t);
p=First->age;
First->age=Last->age;
Last->age=p;
}
Last=Last->next;
}
First=First->next;
}
printf_inf(head);
}
voidmain()
{
structnode*head;
intchoice;
login();
if((head=read_inf())==0)
{
printf("请录入数据\n");
head=creat();
save_inf(head);
}
while
(1)
{
system("CLS");
printf("\n\n**************学生学籍管理系统**************\n\n");
printf("1.显示全部学生信息\n\n");
printf("2.添加学生信息\n\n");
printf("3.删除学生信息\n\n");
printf("4.查询或修改学生信息\n\n");
printf("5.学生学号排序\n\n");
printf("6.储存文件\n\n");
printf("7.退出系统\n\n");
printf("请选择(0~7)\n\n");
scanf("%d",&choice);
getchar();
system("CLS");
switch(choice)
{
case1:
printf_inf(head);break;
case2:
add_inf(head);break;
case3:
delete_inf(head);break;
case4:
searchcorrect(head);break;
case5:
Sort(head);break;
case6:
save_inf(head);break;
case7:
exit(0);break;
}
}
}