学生基本信息管理系统.docx
《学生基本信息管理系统.docx》由会员分享,可在线阅读,更多相关《学生基本信息管理系统.docx(35页珍藏版)》请在冰点文库上搜索。
学生基本信息管理系统
科技大学
课程设计说明书
C语言课程设计
——学生基本信息管理系统
学生:
玉前
学号:
1567159136
专业:
软件工程
班级:
一班
指导教师:
褚燕华
日期:
2015年1月6日
参考文献25
致26
科技大学课程设计任务书
课程名称
C语言课程设计
设计题目
学生基本信息管理系统
指导教师
褚燕华
时间
2015.1.5——2015.1.9
一、教学要求
1.巩固和加深学生对C语言课程的基本知识的理解和掌握
2.掌握C语言编程和程序调试的基本技能
3.利用C语言进行基本的软件设计
4.掌握书写程序设计说明文档的能力
5.提高运用C语言解决实际问题的能力
二、设计资料及参数
每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。
某班学生基本信息管理,包括以下功能:
v从键盘输入包括学号、、性别、出生年月日、籍贯、所在院系、专业、奖惩信息等,并将其保存在磁盘文件里
v具有进行单项查询或多项查询的功能(即按照给定的关键字等找出满足条件的纪录)
v具有插入、修改和删除信息的功能
v具有输出文件数据信息的功能
三、设计要求及成果
1.分析课程设计题目的功能需求(可选用数组或链表实现,可多人(最多3人)协作完成一个题目)
2.写出详细设计说明(至少包括功能实现分析和模块流程图)
3.编写程序代码,调试程序使其能正确运行(代码书写要规,标示符要见名知意,要有必要的注释,每人至少500行代码,不包括注释和花括号)
4.设计完成的软件要便于操作和使用
5.设计完成后提交课程设计报告(请严格按照模板进行排版)
四、进度安排
第一天 选择课程设计题目,分析课题的要求
第二天 编程
第三天 编程及调试
第四天 写课程设计报告
第五天 提交课程设计报告(打印稿及电子稿)
五、评分标准
1.根据平时上机考勤、表现和进度,教师将每天点名和检查
2.根据课程设计完成情况,必须有可运行的软件。
3.根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。
六、建议参考资料
1.《C语言程序设计》,谭浩强,清华大学
2.《C语言程序设计课程设计》,振安,机械工业
第一章需求分析
1.1引言
学生基本信息管理系统
1.2任务概述
1.建立学生信息,信息至少包括,学号,性别,年龄,出生日期,家庭地址,e_mail,地址等;
2.能够提供新建,浏览,查找,修改和删除信息的功能;
3.能够提供不同方式查询的功能;
1.3数据描述
structstudent
{
charNO[20];
charname[20];
intage;
charsex[3];
charbirthday[10];
charaddress[30];
charphone[20];
chare_mail[20];
structstudent*next;//下个结点
};
1.4功能需求
1、输入功能:
一次可以完成自定义学生人数的学生信息记录的输入。
2、删除功能:
对指定学生信息进行删除。
3、修改功能:
对指定学生信息进行修改。
4、查询功能:
选择某种方式并输入该信息查询符合条件的学生信息。
5、排序功能:
以英语课程的分数对学生信息进行排序。
6、显示功能:
将以上操作后的学生信息显示出来。
7、退出主菜单。
1.5性能需求
1、输入功能:
一次可以完成自定义学生人数的学生信息记录的输入。
2、删除功能:
对指定学生信息进行删除。
3、修改功能:
对指定学生信息进行修改。
4、查询功能:
选择某种方式并输入该信息查询符合条件的学生信息。
5、排序功能:
以英语课程的分数对学生信息进行排序。
6、显示功能:
将以上操作后的学生信息显示出来。
7、退出主菜单。
1.6运行需求
运行时需要实现各个模块功能的函数来完成运行。
1.7任务计划
输入学生基本信息,对学生基本信息进行修改,删除,排序等,能够实现通过输入,等进行查询学生信息
第二章概要设计
2.1总体设计
总体结构我们采取模块化进行程序设计,要求程序的功能设计、数据结构设计及整体结构设计合理。
也可根据自己对题目的理解增加新的功能模块。
系统以菜单界面方式(至少采用文本菜单界面,如能采用图形菜单界面更好)工作,运行界面友好,演示程序以用户和计算机的方式进行。
学生管理系统
4、输入你要查找学生姓名
菜单
1、新增学生信息
2、删除学生信息
3、导入学生信息
4、学生信息搜素
5、学生信息保存
6、退出
7、保存学生信息:
提示保存成功
1、输入学生信息:
学生姓名,学号,性别年龄,出生日期,电话
2、输入要删除的学生编号,删除学生信息
8,退出系统
3、输出学生的姓名,学号,性别年龄,出生日期,家庭地址,e_mail,,电话
如图2.1
2.2数据类型设计(或数据结构设计)
structstudent
{
charNO[20];
charname[20];
intage;
charsex[3];
charbirthday[10];
charaddress[30];
charphone[20];
chare_mail[20];
structstudent*next;//下个结点
};
2.3接口设计//函数声明
表2.1:
函数列表
函数名
函数首部
函数功能
Void
show_menu();
void
显示菜单
voidmenu();
void
执行菜单
Void
creat_stu();
void
建立链表
voidinsert_stu();
voidprint_stu();
void
学生信息录入
Void
search_NO();
void
以学号方式查询
Void
search_name();
void
以方式查询
voidarrage_stu();
void
排序
Void
del_stu();
void
删除学生信息
voidrevise_stu();
void
修改学生信息
voidsave();
void
保存信息
如图2.2
2.4运行界面设计
主菜单模块
采用switch()函数从选择相应菜单对应功能
switch(c)
{
getchar();
case1:
insert_stu();break;//学生信息录入
case2:
print_stu();break;//学生信息浏览
case3:
search_NO();break;//以学号方式查询信息
case4:
search_name();break;//以方式查询信息
case5:
del_stu();break;//删除学生信息
case6:
revise_stu();break;//修改学生信息
case7:
arrage_stu();break;//保存学生信息
case0:
exit(0);//退出
}
第三章详细设计
3.1输入模块设计
数据输入模块
采用scanf()函数输入新联系人信息插入至就结构数据当中。
printf("\t\t输入:
\t");
scanf("%s",p1->NO);//学号
printf("\t\t输入学生:
\t");
scanf("%s",p1->name);//
printf("\t\t输入学生年龄:
\t");
scanf("%d",&p1->age);//年龄
printf("\t\t输入学生性别:
\t");
scanf("%s",p1->sex);//性别
printf("\t\t输入学生出生年月:
\t");
scanf("%s",p1->birthday);//出生年月
printf("\t\t输入学生地址:
\t");
scanf("%s",p1->address);//地址
printf("\t\t输入学生:
\t");
scanf("%s",p1->phone);//
printf("\t\t输入学生E-mail:
\t");
scanf("%s",p1->e_mail);//E-mail;
n++;
3.2输出模块设计
数据浏览模块
采用分屏显示,每屏3条记录。
用fread或fscanf读文件,输出结果。
for(p=head->next;p!
=NULL;p=p->next)//读出信息
{
printf("**************学生信息浏览****************\n");
printf("\t\t:
\t%s\n",p->NO);
printf("\t\t学生:
\t%s\n",p->name);
printf("\t\t学生年龄:
\t%d\n",p->age);
printf("\t\t学生性别:
\t%s\n",p->sex);
printf("\t\t学生出生年月:
\t%s\n",p->birthday);
printf("\t\t学生地址:
\t%s\n",p->address);
printf("\t\t学生:
\t%s\t\n",p->phone);
printf("\t\t学生E-mail:
\t%s\n",p->e_mail);
printf("\n");//输出信息
}
}
3.3查找模块设计
1)按方式查找模块
通过键盘输入要查找的学生,然后与及结构数据中的信息逐一对比,找出学生信息并输出
voidsearch_name()//学生信息查找
{
STU*p=NULL;
charname[20];
if(head==NULL)//判断链表是否为空
{
printf("文档中无记录!
\n");
return;
}
printf("输入学生:
");
scanf("%s",name);
for(p=head->next;p!
=NULL;p=p->next)//读出信息
{
if(!
strcmp(p->name,name))
1)按学号查找模块
通过键盘输入要查找的,然后与结构数据中的信息逐一对比,找出学生信息并输出
voidsearch_NO()//信息查找
{
STU*p=NULL;
charNO[20];
if(head==NULL)//判断链表是否为空
{
printf("文档中无记录!
\n");
return;
}
printf("请输入:
");
scanf("%s",NO);
for(p=head->next;p!
=NULL;p=p->next)//读出信息
{
if(!
strcmp(p->NO,NO))
3.4排序模块设计
通过键盘输入学生的学号,按照学号从小到大进行排序
voidarrage_stu()
{
STU*p1,*p2;
intin=0,j;
if(head->next==NULL)//首先判断
{
printf("你还没有记录,无法排序\n");
return;
}
printf("n=%d",n);
p1=head->next;
for(in=0;in{
for(j=0,p1=head->next;j<=n-in-3;p1=p1->next,j++)
{
if(j==0)//第一次比较第一个和第二个结点信息
{
if(strcmp(p1->NO,p1->next->NO))//比较p1本身和p1下一个结点
{
p2=p1->next;
p1->next=p1->next->next;
p2->next=p1;
head->next=p2;
p1=head->next;//从新结合CUR赋值
/*
p1=head->next;
p1=p2;
}
}
if(strcmp(p1->next->NO,p1->next->next->NO))//比较p1下一个和p1下两个结点
{
p2=p1->next;
p1->next=p1->next->next;
p2->next=p1->next->next;
p1->next->next=p2;
}
}
if(strcmp(head->next->NO,head->next->next->NO))//只有两个结点信息时直接
//比较他们两个
{
p1=head->next;
head->next=p1->next;
p1->next=p1->next->next;
head->next->next=p1;
if(n==2)//只有两个结点信息时吧第二个结点的
//next赋为空
head->next->next->next=NULL;
}
}
}
3.5保存及读取模块设计
printf("\n打不开文件!
\n");
return;
}
if(head->next==NULL)
{
printf("\n信息为空!
\n");
return;voidsave()
{
printf("*********************保存信息并结束*********");
STU*p=NULL;
FILE*fp;
char*filename="fname.txt";
if((fp=fopen("fname.txt","w"))==NULL)//出错检测
{
}
else
p=head->next;
while(p!
=NULL)
{
fprintf(fp,"%s%s%d%s%s%s%s%s\n",p->NO,p->name,p->age,
p->sex,p->birthday,p->address,p->phone,p->e_mail);//存入
//文件
p=p->next;
}
printf("保存完毕!
\n");
fclose(fp);
}
第四章测试分析
4.1测试程序执行情况
主菜单
输入学生信息
学生信息浏览
按学号查找学生信息
按查找学生信息
修改学生信息
4.2出现的问题和解决的方法
第一次时当输入学生信息时无法进行学生信息浏览,当引入了学生信息浏览函数,可以浏览多个学生信息。
有了学生信息修改函数可以随时修改学生信息等等。
第五章用户手册
5.1使用说明
先选择录入信息,录入结束后按对应的数字跳出,执行其他任务选择操作时点击对应的数字再按回车即可。
5.2运行说明
请勿输入不符合格式的字符,如需退出请输入对应数字。
第六章课程设计总结
在我们上机调试程序的过程中,我遇到了很多问题,这次程序设计我写了好长时间,从各种资料上找,参考,终于完成了。
在这期末考试前期,各科结课,面临着各种考试,这次的课设我更是费尽心思,有时也因这样那样的原因,抱怨过,但在完成了课设之后,我发现我错了,课程设计不仅巩固了我们的知识,还使得我们学到了平时所忽略的细节,最要的是它磨练我们的毅力让我们在大学的下一阶段能更好的成长,最后走向成功,这是值得我们每一个人体验的。
程序源代码
#include
#include
#include
#defineLENsizeof(structstudent)
//("*******************定义结构体******************");
structstudent
{
charNO[20];
charname[20];
intage;
charsex[3];//'F'表示性别男,'M'表示性别女
charbirthday[10];
charaddress[30];
charphone[20];
chare_mail[20];
structstudent*next;//下个结点
};
typedefstructstudentSTU;
STU*head=NULL;//全局指针
intn,i=0;//全局变量
//("*************************自定义函数*************");
voidshow_menu();//显示菜单
voidmenu();//执行菜单
voidcreat_stu();//建立链表
voidinsert_stu();//学生信息录入
voidprint_stu();//学生信息浏览
voidsearch_NO();//以学号方式查询信息
voidsearch_name();//以方式查询信息
voidarrage_stu();//排序
voiddel_stu();//删除学生信息
voidrevise_stu();//修改学生信息
voidsave();//保存信息
voidmain()
{
creat_stu();
menu();
}
//("********************创建链表***************");
voidcreat_stu()
{
FILE*fp;
longsize;
STU*p1,*p2;
head=(STU*)malloc(sizeof(STU));
head->next=NULL;
if((fp=fopen("fname.txt","r"))==NULL)
{
printf("这是新表\n");
return;
}
fseek(fp,0L,2);
size=ftell(fp);
if(!
size)
{
printf("这是空表\n");
return;
}//开始创建链表
rewind(fp);//移到文件首部
p2=head->next;//找到当前位置
while(!
feof(fp))
{
p1=(STU*)malloc(sizeof(STU));
fscanf(fp,"%s%s%d%s%s%s%s%s\n",p1->NO,p1->name,&p1->age,p1->sex,p1->birthday,p1->address,p1->phone,p1->e_mail);
p1->next=NULL;
//创建结点完
if(head->next==NULL)
head->next=p1;
else
p2->next=p1;
p2=p1;
n++;
}
p2->next=NULL;
fclose(fp);
}
//("***********************执行菜单*****************");
voidmenu()
{
intc;
show_menu();
while
(1)
{
scanf("%d",&c);
switch(c)
{
getchar();
case1:
insert_stu();break;
case2:
print_stu();break;
case3:
search_NO();break;
case4:
search_name();break;
case5:
del_stu();break;
case6:
revise_stu();break;
case7:
arrage_stu();break;
case0:
exit(0);
}//执行菜单选项
show_menu();
}
}
//("************************显示菜单****************");
voidshow_menu()
{
printf("\n");
printf("\n*********************菜单************\n");
printf("\t\t1.输入学生信息\n");
printf("\t\t2.浏览学生信息\n");
printf("\t\t3.以学号方式查询信息\n");
printf("\t\t4.以方式查询信息\n");
printf("\t\t5.删除学生信息\n");
printf("\t\t6.修改学生信息\n");
printf("\t\t7.排序\n");
printf("\t\t0.退出\n");
printf("\n***************************************\n");
printf("\n请选择\n");
}
//("******************学生信息录入******************");
voidinsert_stu()//学生信息录入
{
n=0;
STU*p1=NULL,*p2=NULL;
p1=(STU*)malloc(sizeof(STU));
printf("\n****************录入学生信息*********\n");
printf("\t\t输入:
\t");
scanf("%s",p1->NO);//学号
printf("\t\t输入学生:
\t");
scanf("%s",p1->name);//
printf("\t\t输入学生年龄:
\t");
scanf("%d",&p1->age);//年龄
printf("\t\t输入学生性别:
\t");
scanf("%s",p1->sex);//性别
printf("\t\t输入学生出生年月:
\t");
scanf("%s",p1->birthday);//出生年月
printf("\t\t输入学生地址:
\t");
scanf("%s",p1->address);//地址
printf("\t\t输入学生:
\t");
scanf("%s",p1->phone);//
printf("\t\t输入学生E-mail:
\t");
scanf("%s",p1->e_mail);//E-mail;
n++;
if(head->next==NULL)
{
head=(STU*)malloc((LEN));
head->next=p1;
}
else
{
for(p2=head;p2->next!
=NULL;p2=p2->next);//找到最后的结点,将增加的结点挂在上面
p2->next=p1;
}
p1->next=NULL;
save();//保存到文件
}
//("********************学生信息浏览*************\n");
voidprint_stu()//学生信息浏览
{