c课程设计信息管理学生信息管理系统大学论文.docx
《c课程设计信息管理学生信息管理系统大学论文.docx》由会员分享,可在线阅读,更多相关《c课程设计信息管理学生信息管理系统大学论文.docx(28页珍藏版)》请在冰豆网上搜索。
c课程设计信息管理学生信息管理系统大学论文
内蒙古科技大学
本科生课程设计说明书
题目:
C语言课程设计
——学生信息管理系统
学生姓名:
学号:
专业:
班级:
指导教师:
日期:
内蒙古科技大学课程设计任务书
课程名称
C语言课程设计
设计题目
学生信息管理系统
指导教师
时间
一、教学要求
1.巩固和加深学生对C语言课程的基本知识的理解和掌握
2.掌握C语言编程和程序调试的基本技能
3.利用C语言进行基本的软件设计
4.掌握书写程序设计说明文档的能力
5.提高运用C语言解决实际问题的能力
二、设计资料及参数
每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。
某班学生基本信息管理,包括以下功能:
v从键盘输入包括学号、姓名、性别、出生年月日、籍贯、所在院系、专业、奖惩信息等,并将其保存在磁盘文件里
v具有进行单项查询或多项查询的功能(即按照给定的关键字姓名等找出满足条件的纪录)
v具有插入、修改和删除信息的功能
v具有输出文件数据信息的功能
三、设计要求及成果
1.分析课程设计题目的功能需求(可选用数组或链表实现,可多人(最多3人)协作完成一个题目)
2.写出详细设计说明(至少包括功能实现分析和模块流程图)
3.编写程序代码,调试程序使其能正确运行(代码书写要规范,标示符要见名知意,要有必要的注释,每人至少3个函数,每人至少200行代码,不包括注释和花括号)
4.设计完成的软件要便于操作和使用
5.设计完成后提交课程设计报告(请严格按照模板进行排版)
四、进度安排
第一天 选择课程设计题目,分析课题的要求
第二天 编程
第三天 编程及调试
第四天 写课程设计报告
第五天 提交课程设计报告(打印稿及电子稿)
五、评分标准
1.根据平时上机考勤、表现和进度,教师将每天点名和检查
2.根据课程设计完成情况,必须有可运行的软件。
3.根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。
六、建议参考资料
1.《C语言程序设计》,谭浩强,清华大学出版社
2.《C语言程序设计课程设计》,刘振安,机械工业出版社
目录
内蒙古科技大学课程设计任务书I
目录II
第一章需求分析3
1.1引言3
1.2任务概述3
1.3数据描述3
1.4功能需求3
1.5性能需求4
1.6运行需求4
1.7任务计划4
第二章概要设计4
2.1总体设计4
2.2数据类型设计(或数据结构设计)6
2.3接口设计//函数声明6
2.4运行界面设计7
第三章详细设计8
3.1输入模块设计8
3.2输出模块设计8
3.3查找模块设计9
3.4排序模块设计10
3.5保存及读取模块设计10
第四章测试分析12
4.1测试程序执行情况12
4.2出现的问题和解决的方法15
第五章用户手册(可选)16
5.1使用说明16
5.2运行说明16
第六章课程设计总结17
附录:
程序代码18
参考文献28
致谢28
第一章需求分析
1.1引言
学生基本信息管理系统
1.2任务概述
1、建立学生信息,信息至少包含学生姓名,学号,性别,年龄,出生日期,家庭地址,e-mail,电话地址等;
2、能够提供新建、浏览、查找、修改和删除通讯录信息的功能;
3、能够提供安不同方式查询的功能;如按姓名或电话等查询;
1.3数据描述
structstudent
{
charNO[20];
charname[20];
intage;
charsex[3];/*'F'表示性别男,'M'表示性别女*/
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、从键盘输入包括学号、姓名、性别、出生年月日、籍贯、所在院系、专业、奖惩信息等,并将其保存在磁盘文件里。
2、具有进行单项查询或多项查询的功能(即按照给定的关键字姓名等找出满足条件的纪录)。
3、具有插入、修改和删除信息的功能。
4、具有输出文件数据信息的功能。
1.7任务计划
第二章概要设计
2.1总体设计
总体结构我们采取模块化方式进行程序设计,要求程序的功能设计、数据结构设计及整体结构设计合理。
也可根据自己对题目的理解增加新的功能模块。
系统以菜单界面方式(至少采用文本菜单界面,如能采用图形菜单界面更好)工作,运行界面友好,演示程序以用户和计算机的对话方式进行。
2.2数据类型设计(或数据结构设计)
structstudent
{
charNO[20];
charname[20];
intage;
charsex[3];/*'F'表示性别男,'M'表示性别女*/
charbirthday[10];
charaddress[30];
charphone[20];
chare_mail[20];
structstudent*next;//下个结点
};
2.3接口设计//函数声明
表2.1:
函数列表
函数名
函数格式//即函数首部
函数功能
voidshow_menu();
void
显示菜单
voidmenu();
void
执行菜单
voidcreat_stu();
void
建立链表
voidinsert_stu();
void
学生信息录入
voidprint_stu();
void
学生信息浏览
voidsearch_NO();
void
以学号方式查询信息
voidsearch_name();
void
以姓名方式查询信息
voidarrage_stu();
void
排序
voiddel_stu();
void
删除学生信息
voidrevise_stu();
void
修改学生信息
voidsave();
void
保存信息
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()函数输入新联系人信息插入至结构数组中。
PF("\t\t输入学生学号:
\t");
scanf("%s",p1->NO);//学号
PF("\t\t输入学生姓名:
\t");
scanf("%s",p1->name);//姓名
PF("\t\t输入学生年龄:
\t");
scanf("%d",&p1->age);//年龄
PF("\t\t输入学生性别:
\t");
scanf("%s",p1->sex);//性别
PF("\t\t输入学生出生年月:
\t");
scanf("%s",p1->birthday);//出生年月
PF("\t\t输入学生地址:
\t");
scanf("%s",p1->address);//地址
PF("\t\t输入学生电话:
\t");
scanf("%s",p1->phone);//电话
PF("\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)//读出信息
{
PF("※※※※※※※※※※※※※※※※※※学生信息浏览※※※※※※※※※※※※※※※※※※\n");
PF("\t\t学生学号:
\t%s\n",p->NO);
PF("\t\t学生姓名:
\t%s\n",p->name);
PF("\t\t学生年龄:
\t%d\n",p->age);
PF("\t\t学生性别:
\t%s\n",p->sex);
PF("\t\t学生出生年月:
\t%s\n",p->birthday);
PF("\t\t学生地址:
\t%s\n",p->address);
PF("\t\t学生电话:
\t%s\n",p->phone);
PF("\t\t学生E-mail:
\t%s\n",p->e_mail);
PF("\n");}//输出信息
}
3.3查找模块设计
1)按姓名查找模块
通过键盘输入要查找的学生姓名,然后与结构数组中的姓名信息逐一比对,找出学生信息并输出
voidsearch_name()//学生姓名信息查找
{
STU*p=NULL;
charname[20];
if(head==NULL)//判断链表是否为空
{
PF("文档中无记录!
\n");
return;
}
PF("输入学生姓名:
");
scanf("%s",name);
for(p=head->next;p!
=NULL;p=p->next)//读出信息
{
if(!
strcmp(p->name,name))
3)按学号查找模块
通过键盘输入要查找的学生学号,然后与结构数组中的电话信息逐一比对,找出学生信息并输出
voidsearch_NO()//学生学号信息查找
{
STU*p=NULL;
charNO[20];
if(head==NULL)//判断链表是否为空
{
PF("文档中无记录!
\n");
return;
}
PF("请输入学生学号:
");
scanf("%s",NO);
for(p=head->next;p!
=NULL;p=p->next)//读出信息
{
if(!
strcmp(p->NO,NO))
3.4排序模块设计
3.5保存及读取模块设计
1)按姓名查找模块
通过键盘输入要查找的学生姓名,然后与结构数组中的姓名信息逐一比对,找出学生信息并输出
voidsearch_name()//学生姓名信息查找
{
STU*p=NULL;
charname[20];
if(head==NULL)//判断链表是否为空
{
PF("文档中无记录!
\n");
return;
}
PF("输入学生姓名:
");
scanf("%s",name);
for(p=head->next;p!
=NULL;p=p->next)//读出信息
{
if(!
strcmp(p->name,name))
3)按学号查找模块
通过键盘输入要查找的学生学号,然后与结构数组中的电话信息逐一比对,找出学生信息并输出
voidsearch_NO()//学生学号信息查找
{
STU*p=NULL;
charNO[20];
if(head==NULL)//判断链表是否为空
{
PF("文档中无记录!
\n");
return;
}
PF("请输入学生学号:
");
scanf("%s",NO);
for(p=head->next;p!
=NULL;p=p->next)//读出信息
{
if(!
strcmp(p->NO,NO))
第四章测试分析
4.1测试程序执行情况
主菜单
输入学生信息
学生信息浏览
按学号查找学生信息
按姓名查找学生信息
删除学生信息
修改学生信息
退出
4.2出现的问题和解决的方法
出现的问题就是不能进行排序,解决方法为删除。
第五章用户手册(可选)
5.1使用说明
运行说明
第六章课程设计总结
在我们上机调试程序的过程中,我遇到了很多的问题,说实话这次课程设计自己没有出多大的力,大部分都是借鉴同学的设计成果,自己设计是总是觉得没有头绪,无从下手。
看到同学认真看程序的样子,还有修改程序时的熟练,我很羡慕他,我想,我要将C语言学好,在将来能为我的就业加分。
在这期末考试前期,学院给我们安排的课程设计周,总让我们觉的有些为难我们,这样一个复杂困难而又繁琐的作业,似乎弄得我们既没有时间也没有心情复习,我曾一度地抱怨过学院,在完成它之后,我发现我错了,课程设计不仅让我们巩固了所学的知识,还使得我们学习到了更多平时所忽略的,最重要的是,它磨砺了我们,让我们在大学的下一个阶段能更好的成长。
附录:
程序代码
#include
#include
#include
#definePFprintf
#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();//以姓名方式查询信息
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;
case0:
exit(0);
}//执行菜单选项
show_menu();
}
}
//◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆显示菜单◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
voidshow_menu()
{
PF("\n");
PF("\n※※※※※※※※※※※※※※※※※※菜单※※※※※※※※※※※※※※※※※※\n");
PF("\t\t◆1.输入学生信息◆\n");
PF("\t\t★2.浏览学生信息★\n");
PF("\t\t◆3.以学号方式查询信息◆\n");
PF("\t\t★4.以姓名方式查询信息★\n");
PF("\t\t◆5.删除学生信息◆\n");
PF("\t\t★6.修改学生信息★\n");
PF("\t\t★0.退出★\n");
PF("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
PF("\n请选择\n");
}
//◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆学生信息录入◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
voidinsert_stu()//学生信息录入
{
n=0;
STU*p1=NULL,*p2=NULL;
p1=(STU*)malloc(sizeof(STU));
PF("\n※※※※※※※※※※※※※※※※※※录入学生信息※※※※※※※※※※※※※※※※※※\n");//录入学生信息
PF("\t\t输入学生学号:
\t");
scanf("%s",p1->NO);//学号
PF("\t\t输入学生姓名:
\t");
scanf("%s",p1->name);//姓名
PF("\t\t输入学生年龄:
\t");
scanf("%d",&p1->age);//年龄
PF("\t\t输入学生性别:
\t");
scanf("%s",p1->sex);//性别
PF("\t\t输入学生出生年月:
\t");
scanf("%s",p1->birthday);//出生年月
PF("\t\t输入学生地址:
\t");
scanf("%s",p1->address);//地址
PF("\t\t输入学生电话:
\t");
scanf("%s",p1->phone);//电话
PF("\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();//保存到文件
}
//◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆学生信息浏览◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
voidprint_stu()//学生信息浏览
{
STU*p=NULL;
if(head==NULL)//判断链表是否为空
{
PF("文档中无记录!
\n");
return;
}
for(p=head->next;p!
=NULL;p=p->next)//读出信息
{
PF("※※※※※※※※※※※※※※※※※※学生信息浏览※※※※※※※※※※※※※※※※※※\n");
PF("\t\t学生学号:
\t%s\n",p->NO);
PF("\t\t学生姓名:
\t%s\n",p->name);
PF("\t\t学生年龄:
\t%d\n",p->age);
PF("\t\t学生性别:
\t%s\n",p->sex);
PF("\t\t学生出生年月:
\t%s\n",p->birthday);
PF("\t\t学生地址:
\t%s\n",p->address);
PF("\t\t学生电话:
\t%s\n",p->phone);
PF("\t\t学生E-mail:
\t%s\n",p->e_mail);
PF("\n");
}//输出信息
}
//◆◆◆◆◆◆◆◆◆◆◆◆