内蒙古科技大学课程设计讲解.docx
《内蒙古科技大学课程设计讲解.docx》由会员分享,可在线阅读,更多相关《内蒙古科技大学课程设计讲解.docx(50页珍藏版)》请在冰豆网上搜索。
内蒙古科技大学课程设计讲解
内蒙古科技大学
本科生课程设计说明书
题目:
C语言课程设计
——职工信息管理系统
学生姓名:
赵杉杉
学号:
1376807439
专业:
计算机科学与技术
班级:
2013级一4班
指导教师:
柏建普
内蒙古科技大学课程设计任务书
课程名称
C语言课程设计
设计题目
职工信息管理系统
指导教师
柏建普
时间
2014.12.31—2014.1.4.
一、教学要求
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语言程序设计课程设计》,刘振安,机械工业出版社
第一章需求分析
1.1引言
由于现今的职工信息管理非常繁琐,管理人员付出大量的工作时间,得到的效率很低。
因此为提高工作效率,减轻单位工作人员对职工信息进行登记,查找的工作,进而需要设计出以功能更完善、合理、先进的职工信息管理系统来管理。
开发此职工信息管理系统软件,以供教学人员及操作者进行职工管理,方便操作者随时添加、查询、修改职工信息。
1.2任务概述
本课程设计主要解决职工信息管理问题。
使用计算机进行信息管理,不仅提高了工作效率,而且大大的提高了其安全性,尤其对于复杂的信息管理,计算机能够充分发挥它的优越性,职工信息管理系统是一个工作单位不可缺少的部分,它的内容对于教学人员及操作者来说都至关重要。
1、首先进行需求分析,搞清楚系统功能和任务;
2、然后在总体设计中确定模块结构、划分功能模块,将软件功能需求分配给所划分的最单元模块。
确定模块间的联系,确定数据结构、文件结构、数据库模式,确定测试方法与策略;
3、在详细设计中,为每个模块确定采用的算法,选择适当的工具表达算法的过程(流程图)来描述模块的详细过程。
确定每一模块采用的数据结构和模块接口的细节,包括对系统外部的接口和用户界面,对系统内部其他模块的接口;
4、根据分析编写C语言代码。
具体任务:
1.职工信息管理系统设计,使之包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。
2.使这个管理系统具有以下功能:
可以使系统以菜单方式工作、能够录入、查询、删除、排序职工的信息。
3.可以按学历、按工号查询职工信息。
使查询职工信息变得方便、简单.
1.3数据描述
该系统用下面五个功能模块编写,每个模块执行不同的功能,体现了模块化设计的思想。
下面五个模块都是利用C语言文件,向文件中追加数据、修改数据、查询数据和删除数据。
输入:
可以输入通讯录记录,利用C语言文件,向文件中按顺序输入职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等(职工号不重复)再用fclose()函数关闭并保存文件。
输出:
也是用通过循环依次输出文件中的数据,即输出所有职工信息记录。
删除:
输入你要删除职工信息后,系统会自动删除他/她的记录,在删除通过switch语句满足提示你确认删除的功能,只有等你确认删除后才会删除。
查找:
为了满足用户的实际需求,设计了两种查询方式可以用工号、学历两种方式查找职工信息记录。
这里用到strcmp()函数,通过比较字符串是否相同来判别是否找到相关信息,找到后就把文件中的数据赋给对应的变量,再把变量所带的值输出到屏幕上。
保存:
用到fclose()函数,每次操作成功后会自动保存到指定的文件中
1.4功能需求
1)输入功能:
可以多次完成多个职工所有信息。
2)浏览功能:
可以一次性浏览职工的所有信息。
3)查询功能:
可以按职工工号和学历两种方式查询。
4)删除功能:
可以对职工的信息进行删除。
5)排序功能:
可以按职工号进行降序排序。
6)退出本系统
1.5性能需求
1)硬件环境
●处理器:
InterCR300或是更高。
●内存:
128MB(建议196MB)。
●硬盘空间:
20MB。
2)软件环境
●操作系统:
Windows2000/XP或是Windows2000/WindowsNTServer4.0
1.6运行需求
1)运行环境
●运行环境:
CodeBlocks/Visual C++6.0
1.7任务计划
设计资料及参数
职工信息管理系统设计
职工信息包括职工号、姓名、性别、出生年月、学历、工资、住址、电话等(职工号不重复)。
试设计一职工信息管理系统,使之能提供以下功能:
v职工信息录入功能(职工信息用文件保存)--输入
v职工信息浏览功能--输出
v查询或排序功能--算法
●按工号查询●按学历查询
v职工信息删除功能
第二章概要设计
2.1总体设计
根据需求分析结果,职工信息管理系统可以分为显示员工资料、录入员工资料、员工信息查询、删除员工信息、员工信息排序、退出信息系统。
如图2-1所示。
图2-1软件模块结构图
2.2数据结构设计
2.2.1定义数组
定义一维数组structworkerwork[50];用于定义员工的总人数,当员工总人数超过50后便不能再录入员工资料。
2.2.2定义结构体
结构体structworker用于存放存放员工的资料,包括员工的基本信息:
工号,姓名,年龄,学历,工资,住址,电话号码。
structworker
{
intnum;工号
charname[15];名字
charxingbie;性别
intage;年龄
charexp[6];学历
intwage;工资
charaddress[20];住址
chartel[12];电话号码
};
intcount=0;当前工人个数
intsort_type=0;当前排序类型
2.3接口设计
表2.1:
函数列表
函数名
函数格式
函数功能
homepage
voidhomepage();
函数主界面
display
voiddisplay();
显示职工信息
input
voidinput();
录入职工信息
del
voiddel();
删除职工信息
find
voidfind();
查询职工信息
sort
voidsort();
排序职工信息
quit
voidquit();
退出系统函数
2.4运行界面设计
主程序流程图如图2-4.所示
第三章详细设计
3.1输入模块设计
图3-1
这个模块主要是录入员工资料,录入的顺序如图所示,当录入的员工人数满到50后,便不能再进行录入员工资料,此时已经达到了录入人数的最大值。
代码实现
voidinput()
{inti,numcheck;
charc;
do
{printf("工号:
\n");
scanf("%d",&work[count].num);
numcheck=1;
if(work[count].num<0)
printf("请输入正整数:
\n");
for(i=0;i{
if(work[count].num==work[i].num)
{numcheck=0;
printf("工号重复,重新输入:
\n");
}
}
……
do
{
c=getchar();
if(c=='y'||c=='Y')
{
count++;
……
此模块中if(work[count].num==work[i].num);numcheck=0;很是重要,它判定录入的工号是否重复,重复的话会有重新输入的提示,避免职工信息的重复。
当记录数已满时,通过sleep(2000),使之回到主界面,进行其他选项设置。
3.2输出模块设计
此模块是用来显示员工的资料信息的,包括工号,姓名,性别,年龄,学历,工资,住址,电话等基本信息,一边管理员能够及时的掌握到所要员工的资料。
代码实现
voiddisplay()
{
inti;
charc;
printf("备注:
学历(1=中专,2=大专,3=本科,4=硕士,5=博士,6=其它):
\n\n\n");
switch(sort_type)
{
case0:
printf("\t\t未排序:
\n\n");break;
case1:
printf("\t\t按工号排序:
\n\n");//sort();break;
case2:
printf("\t\t按工资排序:
\n\n");//sort();break;
}
printf("\t工号\t姓名\t性别\t年龄\t学历\t工资\t住址\t电话\n");
……
此模块中有三种显示方式,第一种是无序显示,就是按照录入时的顺序显示,,还有两种分别是是按照工号和工资来排序。
后两种显示方式主要是有switch(sort_type)语句来实现的,它相当于一个开关,与下面的case()相对应,相括号中的数字相对应时,就会执行相应的语句。
3.3查找模块设计
此模块用于职工信息的查询,共分为两种查询方式,一是按工号查询,二是按学历查询。
用if函数来实现,可快速查询到职工的姓名、工号、学历、电话等详细信息。
代码实现
voidfind()
{
inti,j;
intchoice=0;
intfind_num;
charfindedu[6];
charc;
system("cls");
printf("\t\t请选择查询功能:
\n");
printf("\t1.按工号查询\n");
printf("\t2.按学历查询\n");
printf("请输入选择:
");
do
{
scanf("%d",&choice);
}while((choice!
=1)&&(choice!
=2));
if(choice==1)
{
printf("\n\t请输入要查询的职工号\n");
scanf("%d",&find_num);
printf("\n正在查询,请稍候");
for(i=0;i<20;i++)
{
printf(".");
Sleep(100);
}
system("cls");
printf("\n\n按任意键返回\n");
c=getch();
system("cls");
homepage();
}
此模块中,通过while((choice!
=1)&&(choice!
=2));这个选择来实现查询的方式,选择“1”为工号查询,选择“2”则为按学历查询。
if(find_num==work[i].num)即为根据职工号进行查询,strcmp(findedu,work[i].exp)根据学历进行职工信息查询。
3.4排序模块设计
此模块用于职工信息的排序,共分为两种排序方式,一是按工号排序,二是按工资排序。
可快速按需求对员工信息进行排序,以便于查看。
代码实现:
voiddisplay()
{
inti;
charc;
system("cls");
printf("备注:
学历(1=中专,2=大专,3=本科,4=硕士,5=博士,6=其它):
\n\n\n");
switch(sort_type)
{
case0:
printf("\t\t未排序:
\n\n");
break;
case1:
printf("\t\t按工号排序:
\n\n");
//sort();
break;
case2:
printf("\t\t按工资排序:
\n\n");
//sort();
break;
}
printf("\t工号\t姓名\t性别\t年龄\t学历\t工资\t住址\t电话\n");
if(count==0)printf("\n\t无员工信息!
\n");
for(i=0;i{
printf("\t%d\t%s\t%c\t%d\t%s\t%d\t%s\t%s\n",
work[i].num,work[i].name,work[i].xingbie,work[i].age,work[i].exp,work[i].wage,work[i].address,work[i].tel);
}
printf("\n\n按任意键返回\n");
c=getch();
system("cls");
homepage();
}
模块中,排序方式方式主要是有switch(sort_type)语句来实现的,它相当于一个开关,与下面的case()相对应,括号中的数字相对应时,就会执行相应的语句。
选择来实现排序的方式,选择“1”为工号排序,选择“2”则为按工资排序。
第四章测试分析
4.1测试程序执行情况
4.1.1登陆界面
如图4-1-1所示
图4-1-1
4.1.2主界面
如图4-1-2所示
图4-1-2
4.1.3显示员工资料
如图4-1-3所示
图4-1-3
4.1.4录入员工资料
如图4-1-4所示
图4-1-4
4.1.5查询员工资料
如图4-1-5所示
图4-1-5
4.1.6删除员工资料
如图4-1-6所示
图4-1-6
4.1.7员工信息排序
如图4-1-7所示
图4-1-7
4.1.8退出系统
如图4-1-8所示
图4-1-8
4.2出现的问题和解决的方法
1.在一些字符或字符串的定义上出项错误,如定义职工电话号码的时候,用成了float类型,而正确的应该是char类型。
2.在进行模块函数设计时,find()函数功能没有设计好,导致部分函数代码过长,可读性降低,以至于再次重写里面的一小部分代码,浪费了大量的时间。
3.在整个程序设计编写完成后,编译时出现了大量的错误,而且里面大部分是因为大小写问题,还有void拼错拼成viod,还有“;”没有写,后来经过程序错误查询,一一更改了过来。
4.在编写代码时没有添加注解,降低了在调试测试时程序的可读性,同时也降低了与其他同学的交流,虽然在测试过程中我把全部的注解加上,但也延长了整个程序的开发时间。
第五章用户手册(可选)
5.1使用说明
(1)根据正确的提示安装软件。
(2)Intel486以上系列、AMDK6以上系列等PC台式机和便携式电脑都可运行。
(3)打开该程序系统,浏览菜单,根据需要选择功能,进行各项操作。
操作如下:
输入正确的用户名和密码进入主菜单。
(如图4-1-1.默认用户名为:
管理者,密码为:
1)
进入主菜单如图4-1-2,根据需要,选择对应的功能。
1.显示员工信息:
职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话(职工号不重复)。
如图4-1-3所示。
2.录入员工信息:
将所需的职工信息输入。
如图4-1-4所示。
3.查询员工信息:
:
则屏幕会出现两个对话框——按学历和按工号查找,查处相应的职工信息。
(此职工信息是否录入)。
如图4-1-5所示。
当查询不能显示需要时,进入录入程序,把所输入的信息进行录入,使之正确能够正常运行。
或进入删除信息中,重新输入自己所要的信息。
当信息输入正确,进入你所需要的菜单程序中:
职工信息:
显示包括职工号、姓名、性别、出生年月、学历、工资、住址、电话等(职工号不重复)。
4.删除员工信息:
选择你要删除的职工,输入职工号,则该职工信息将被系统删除。
如图4-1-6所示。
(此职工信息是否录入)
5.员工信息排序:
则屏幕会出现两个对话框——按工号和按工资排序,对职工信息进行相应的排序。
如图4-1-7所示。
排序完成后,可进入浏览信息页面,查看职工信息。
0.退出信息系统:
退出系统,感谢使用。
如图4-1-8所示。
第六章课程设计总结
通过此次学生成绩信息管理系统,让我熟悉了软件开发的流程,相信在以后的工作中我能在最短的时间内投入到大的程序开发项目中。
在进行课程设计的前两天,不知道从何入手,很是不解,不知道我们究竟要做什么。
后来通过上网找资料,才发现有好多做法,根本就看不完,此时才真正意识到差距所在。
于是,通过借鉴网络作品,才发现作品并不是一味的照搬照抄才实用,集众家之所成,不断完善,才能造出属于自己的作品,并且实用。
回顾起此次课程设计,至今我仍感慨颇多,的确,从拿到题目到完成整个编程,从理论到实践,在这些日子里,我学到很多很多的东西,不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体……通过这次课程设计之后,一定把以前所学过的知识本次课程设计结束了,对于我们的影响很大。
我们通过这次实践学到了许多知识。
学到了设计一个简单的系统。
要注意哪些方面。
也使我知道自己哪些方面做得还不够。
我总结出了一点点的经验如下:
①要对系统的功能和要求做出详细的分析,并合理分解任务。
②把分解出来的子任务,做给一个相对独立的模块。
③在设计一个模块之前,要简单构想一下总界面的显视情况。
④针对构想出来的界面进行程序的编写。
在整个课程设计中,我认为最重要的就是耐心和细心。
细心,就是在编写过程中注意拼写,仔细编写程序;耐心,就是程序编译中出现很多错误的时候能够耐心去修改,只有这样,才能很好的完成程序。
附录:
程序代码
#include
#include
#include
#include
voidhomepage();//主界面
voiddisplay();//显示全部信息
voidinput();//录入插入
voidfind();
voiddel();//删除记录
voidsort();//排序
voidquit();//退出界面
structworker
{
intnum;//工号
charname[15];//名字
charxingbie;//性别
intage;//年龄
charexp[6];//学历
intwage;//工资
charaddress[20];//住址
chartel[12];//电话号码
};
intcount=0;//当前工人个数
intsort_type=0;//当前排序类型
structworkerwork[50];
voidmain()
{inti=0,k=0;
charusername[15],pwd[6];
system("color3f");
printf("\n\n");
printf("\t******************************************************\n");
printf("\t******************************************************\n");
printf("\t*************\n");
printf("\t******欢迎使用职工信息管理系统*******\n");
printf("\t*************\n");
printf("\t*************\n");
printf("\t******赵杉杉*******\n");
printf("\t*************\n");
printf("\t******2014.12.30*******\n");
printf("\t*************\n");
printf("\t******************************************************\n");
printf("\t******************************************************\n");
for(i=0;i<3;i++)
{
printf("\n请输入用户名:
");
gets(username);
printf("\n请输入密码:
");
gets(pwd);
if((strcmp(username,"管理者")==0)&&(strcmp(pwd,"1")==0))
{
printf("\n您已经成功登录");
k=1;
for(i=0;i<20;i++)
{
printf(".");
Sleep(100);
}
system("cls");
homepage();
break;
}
else
printf("\n用户名或密码无效请重新输入:
\n");
continue;
}
if(k==0)
printf("\n连续输入错误3次将退出程序\n");
Sleep(2000);
quit()