c语言课程设计职工信息管理系统.docx
《c语言课程设计职工信息管理系统.docx》由会员分享,可在线阅读,更多相关《c语言课程设计职工信息管理系统.docx(31页珍藏版)》请在冰豆网上搜索。
c语言课程设计职工信息管理系统
c语言课程设计——职工信息管理系统(总34页)
XXXXXXX大学
课程设计说明书
名称计算机语言C课程设计——
职工信息管理系统设计
2011年6月20日至2011年6月26日共1周
院系.
班级.
姓名.
学号.
系主任.
教研室主任.
指导教师.
一、课程设计的目的与要求
目的
1.掌握C语言编程的基础知识较熟练的编写C语言应用程序。
2.能够利用所学的基本知识和技能,解决简单的程序设计问题,增强独立完成工作的能力。
3.通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高,进一步培养学生热爱专业的思想,同时对本专业综合素质的提高起一个积极的推动作用。
要求
1.要求利用C语言面向过程的编程思想来完成系统的设计;
2.突出C语言的函数特征,以多个函数实现每一个子功能;
3.画出功能模块图;
4.进行简单界面设计,能够实现友好的交互;
5.具有清晰的程序流程图和数据结构的详细定义;
6.熟练掌握C语言对文件的各种操作。
二、题目说明
1.职工信息管理系统设计,使之包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。
2.使这个管理系统具有以下功能:
可以使系统以菜单方式工作、能够录入、查询、删除、排序职工的信息。
3.可以按学历、按工号查询职工信息。
使查询职工信息变得方便、简单。
程序开发背景
现在随着社会的进步和人民生活水平的逐渐提升,大学生数量越来越多,相应的所需要处理的的信息也越来越复杂,而凭借人力不可能准确及时地处理所有信息,因此,编写此程序是极为必要的。
但由于各个学校的情况不同,所以难以编写一个通用的成绩管理程序。
此程序是根据本校情况和老师指导所编写,用以解决教师对学生成绩的添加、修改、删除以及学生对其成绩的查询等工作。
开发工具介绍
VisualC++VisualC++是一个功能强大的可视化软件开发工具。
自1993年Microsoft公司推出VisualC++后,随着其新版本的不断问世,VisualC++已成为专业程序员进行软件开发的首选工具。
虽然微软公司推出了VisualC++.NET(VisualC++,但它的应用的很大的局限性,只适用于Windows2000,WindowsXP和Windows。
所以实际中,更多的是以VisualC++为平台。
VisualC++不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境。
VisualC++由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导ClassWizard等开发工具。
这些组件通过一个名为DeveloperStudio的组件集成为和谐的开发环境。
VisualC++它大概可以分成三个主要的部分:
1.DeveloperStudio。
2.MFC。
3.PlatformSDK。
[1]
三、总体设计
总体思想
本系统主要的设计思想是实现对职工信息的录入、删除、排序、查询等主要功能。
职工信息以文件的形式存储。
系统的人机接口采用简单的字符界面进行交互。
系统的设计方法是结构化设计方法,采用C语言进行开发。
软件开发平台采用VisualC++,主要考虑在VC中可以使用中文,用户交互界面设计比较美观清晰。
软件模块结构图
根据需求分析结果,职工信息管理系统可以分为显示员工资料、录入员工资料、员工信息查询、删除员工信息、员工信息排序、退出信息系统。
如图3-1所示。
图3-1
系统流程图
主函数
显示函数
录入函数
查询函数
删除函数
排序函数
四、详细设计和系统实施
数据结构设计
定义数组
定义一维数组structworkerwork[50];用于定义员工的总人数,当员工总人数超过50后便不能再录入员工资料。
定义结构体
结构体structworker用于存放存放员工的资料,包括员工的基本信息:
工号,姓名,年龄,学历,工资,住址,电话号码。
structworker
{
intnum;工号
charname[15];名字
charxingbie;性别
intage;年龄
charexp[6];学历
intwage;工资
charaddress[20];住址
chartel[12];电话号码
};
intcount=0;当前工人个数
intsort_type=0;当前排序类型
函数功能描述
函数主界面:
voidhomepage();
显示职工成绩信息:
voiddisplay();
录入职工信息信息:
voidinput();
删除职工信息:
voiddel();
查询职工信息:
voidfind();
排序职工信息:
voidsort();
用户等待函数:
voidwaiting();
退出系统函数:
voidquit();
界面设计
用户登录界面
此模块用于欢迎界面,同时要求用户输入用户名和密码,只有当两者都正确时,才能进入到系统,当有三次错误,系统就会自动退出,如图4-1所示。
图4-1
代码实现:
voidmain()
{inti=0,k=0;
charusername[15],pwd[6];
for(i=0;i<3;i++)
{
printf("\n请输入用户名:
");
gets(username);
printf("\n请输入6位密码:
");
gets(pwd);
if((strcmp(username,"admin")==0)&&(strcmp(pwd,"")==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();
}
在此模块中,if((strcmp(username,"Admin")==0)&&(strcmp(pwd,"")==0)),用于检测用户名和密码是否正确。
for(i=0;i<3;i++)
{
printf("\n请输入用户名:
");
gets(username);
printf("\n请输入6位密码:
");
gets(pwd);
此段代码用于获取账户名和密码并计数是否超过三次,超过三次,则有Sleep(2000);实现退出程序。
主界面
此模块主要实现进入主界面和根据用户需要进入相应界面,包括显示界面,录入界面,删除界面,排序界面并可以选择退出,如图4-2所示:
图4-2
代码实现
voidhomepage()
{
charn;
while((n!
='1')&&(n!
='2')&&(n!
='3')&&(n!
='4')&&(n!
='5')&&(n!
='0'))
{
printf("\n请选择:
");
fflush(stdin);
scanf("%c",&n);
switch(n)
{
case'1':
display();
break;
case'2':
if(count<50)input();
else
{printf("记录数已满\n");
Sleep(2000);
system("cls");
homepage();
}
break;
……
此模块中,switch(n),case()用于判定主界面的选项,根据选项进行设置。
其中if(count<50)用于限制录入员工的人数,超过50名员工就无法再进行录入,并且直接通过sleep(2000);homepage()回到主界面上。
显示界面
此模块是用来显示员工的资料信息的,包括工号,姓名,性别,年龄,学历,工资,住址,电话等基本信息,一边管理员能够及时的掌握到所要员工的资料。
如图4-3所示。
图4-3
代码实现
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");
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),使之回到主界面,进行其他选项设置。
信息查询界面
此模块用于职工信息的查询,共分为两种查询方式,一是按工号查询,二是按学历查询。
用if函数来实现,可快速查询到职工的姓名、工号、学历、电话等详细信息。
如图4-5所示。
图4-5
代码实现
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)根据学历进行职工信息查询。
删除界面
此模块用于删除员工信息,对于已经无用的员工信息进行删除,采用按工号删除的模式。
如图4-6所示。
图4-6
代码实现
voiddel()
{
inti,j,del_num,match=0;
charc;
system("cls");
printf("请输入要删除的员工工号:
\n");
scanf("%d",&del_num);
waiting();
for(i=0;i{
if(work[i].num==del_num)
{
match=1;
for(j=i;jwork[j]=work[j+1];
count--;
}
}
此模块中,首先还是要先进职工信息查询模块,然后再根据查询到的职工号进行删除。
printf("%d",&del_num);即为显示要删除的职工号,if(c=='y'||c=='Y')则是确定是否删除选定的职工信息。
最后通过homepage()回到主界面。
五、遇到的问题及解决办法
1.在一些字符或字符串的定义上出项错误,如定义职工电话号码的时候,用成了float类型,而正确的应该是char类型。
2.在进行模块函数设计时,find()函数功能没有设计好,导致部分函数代码过长,可读性降低,以至于再次重写里面的一小部分代码,浪费了大量的时间。
3.在整个程序设计编写完成后,编译时出现了大量的错误,而且里面大部分是因为大小写问题,还有void拼错拼成viod,还有“;”没有写,后来经过程序错误查询,一一更改了过来。
4.在编写代码时没有添加注解,降低了在调试测试时程序的可读性,同时也降低了与其他同学的交流,虽然在测试过程中我把全部的注解加上,但也延长了整个程序的开发时间。
六、课程设计总结
通过此次学生成绩信息管理系统,让我熟悉了软件开发的流程,相信在以后的工作中我能在最短的时间内投入到大的程序开发项目中。
在进行课程设计的前两天,不知道从何入手,很是不解,不知道我们究竟要做什么。
后来通过上网找资料,才发现有好多做法,根本就看不完,此时才真正意识到差距所在。
于是,通过借鉴网络作品,才发现作品并不是一味的照搬照抄才实用,集众家之所成,不断完善,才能造出属于自己的作品,并且实用。
在整个课程设计中,我认为最重要的就是耐心和细心。
细心,就是在编写过程中注意拼写,仔细编写程序;耐心,就是程序编译中出现很多错误的时候能够耐心去修改,只有这样,才能很好的完成程序。
虽然在整个过程中出现了不少错误,但最终还是圆满完成了,此次程序设计的经历让我学到了太多,同时也让我理解到参加的项目越大越能学到知识,因此以后我会积极主动的去参加一些项目,以此来提高自己的技能和编程经验。
七、参考文献
【1】.《实用c语言简明教程》李金祥、顾小晶主编
【2】.《c++语言程序设计》,刘振安,刘燕君,孙忱,机械工业出版社;
【3】.《C语言程序设计一体化案例教程》,刘维富,清华大学出版社;
【4】.《C语言课程设计》,黄明,梁旭,万洪莉,电子工业出版。
附录(源程序代码)
#include<>
#include<>
#include<>
#include<>
voidhomepage();3f;
Sleep(100);
}
system("cls");
homepage();
break;
}
else
printf("\n用户名或密码无效请重新输入:
\n");
continue;
}
if(k==0)
printf("\n连续输入错误3次将退出程序\n");
Sleep(2000);
quit();
}
voidhomepage()
{
charn;
printf("\n\n");
printf("\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("\t┃************************************************************┃\n");
printf("\t┃***┃\n");
printf("\t┃*1.显示员工资料*2.录入员工资料*┃\n");
printf("\t┃***┃\n");
printf("\t┃************************************************************┃\n");
printf("\t┃***┃\n");
printf("\t┃*3.员工信息查询*4.删除员工记录*┃\n");
printf("\t┃***┃\n");
printf("\t┃************************************************************┃\n");
printf("\t┃***┃\n");
printf("\t┃*5.员工信息排序*0.退出信息系统*┃\n");
printf("\t┃***┃\n");
printf("\t┃************************************************************┃\n");
printf("\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
while((n!
='1')&&(n!
='2')&&(n!
='3')&&(n!
='4')&&(n!
='5')&&(n!
='0'))
{
printf("\n请选择:
");
fflush(stdin);
scanf("%c",&n);
switch(n)
{
case'1':
display();
break;
case'2':
if(count<50)
input();
else
{
printf("记录数已满\n");
Sleep(2000);
system("cls");
homepage();
}
break;
case'3':
find();
break;
case'4':
del();
break;
case'5':
sort();
break;
case'0':
quit();
break;
default:
printf("\n选项错误\n");
}
}
}
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");
um,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();
}
voidinput()
{
inti,numcheck;
charc;
system("cls");
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");
}
}
}while(!
numcheck);{
printf("姓名:
");
fflush(stdin);
scanf("%s",work[count].name);
fflush(stdin);
printf("性别(F:
M):
");
scanf("%c",&work[count].xingbie);
printf("年龄:
");
scanf("%d",&work[count].age);
fflush(stdin);
printf("学历(1=中专,2=大专,3=本科,4=硕士,5=博士,6=其它):
\n");
scanf("%s",work[count].exp);
printf("工资:
");
scanf("%d",&work[count].wage);
printf("住址:
");
scanf("%s",work[count].address);
printf("电话:
");
scanf("%s",work[count].tel);
}
printf("\n是否继续输入(y/n):
\n");
do
{
c=getchar();
if(c=='y'||c=='Y')
{
count++;
if(count<50)
input();
else
{
printf("记录数已满\n");
Sleep(2000);
system("cls");
homepage();
}
}
elseif(c=='n'||c=='N')
{
count++;
system("cls");
homepage();
}
else;
}while((c!
='y')&&(c!
='n')&&(c!
='Y')&&(c!
='N'));
}
voiddel()
{
inti,j,del_num,match=0;
charc;
system("cls");
printf("请输入要删除的员工工号:
\n");
scanf("%d",&del_num);
waiting();
for(i=0;i{
if(work[i].num==del_num)
{
match=1;
for(j=i;jwork[j]=work[j+1];
count--;
}
}
if(!
match)printf("\n没有要找的工号.\n");
printf("\n是否继续删除(y/n)");
fflush(stdin);
do
{
c=getchar();
if(c=='y'||c=='Y')
{
del();
}
elseif(c=='n'||c=='N')
{
system("cls");
homepag