已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
c语言程序设计课程设计任务书设计题目:职员档案管理一 已知技术参数与设计前提员工人数1000人,对这1000人进行人员调动,管理二 设计内容及要求1 创建与显示职工档案2 查询与修改职工档案3 添加与删除职工档案4 排序职工档案三课程设计工作计划1、确定题目,成立设计小组,做用户需求分析(3天)2、查阅资料,进行问题分析,制定方案,确定成员分工(3天)3、根据方案编写程序并进行调试(2天)4、撰写设计说明书,完成设计(3天)5、提交设计内容,答辩四、相关教材及参考书目1、C语言程序设计 高等教育出版社2、The C Programming Language 机械工业出版社 指导教师签字: 系主任 签字 : 年 月 日目 录一、需求分析4二、人员分工5三、系统运行环境5四、系统模块功能5五、使用说明7六、程序源代码14参考文献10教师评语22职员管理系统使用说明书一、需求分析在电子信息高度发达的时代,时间就是金钱,运用计算机系统对职工档案进行管理能够提高管理效率,节约时间,才会在有效的时间里创造更多的财富。利用该系统可以对工人的编号、姓名、电话、薪水、家庭住址等信息进行管理,方便高效。职工档案管理是一项非常繁琐的业务,用计算机实现自动化管理既可以减轻管理人员的劳动强度,又可以提高管理效率.欲编写一个比较实用的职工档案管理程序,应包括以下几个方面的功能:建立管理档案,修改职工信息,删除离职职工信息,增加新的职工信息,查找职工信息,对职工信息进行排序.在查找和删除职工信息时,要选择按姓名查询还是按编号查询进行操作,这要用到文件存储数据结构,数据结构的构造类型选择结构体类型,包括结构体变量,结构体数组,结构体指针.基本类型有整型和字符型,其中字符型用来定义职工编号,姓名,薪水,电话,家庭住址.二、人员分工姓名主要负责内容xxx(组长)总体设计;管理档案的创建和显示的设计和编译.xxx职工档案的查询和修改的设计和编译.xxx职工档案的添加和删除的设计和编译xxx职工档案的排序和退出的设计和编译.三、运行环境硬件环境: CPU(pentium4 2.4Hz)、内存(256MB)、硬盘(80G)软件环境:Windows 98、 Tubro.c 2.0四、系统模块功能1、系统总体框模 块 能 功 1创建职工2显示职工3查询职工4修改职工5添加职工6删除职工职工档案4修改职工档案5添加职工档案6删除职工档7职工信息 排案7排序职工2、模块设计创建模块:该模块功能是创建管理档案。在chuangjian()函数中定义整型变量i,结构体变量temp,和文件指针fp,以“w”的方式打开“jilu”文件,如果fp指向NULL,说明打开方式失败。否则,输入第一个记录,包括编号、姓名、电话、薪水、家庭住址等。直到遇见#”结束录入。最后关闭文件。显示模块:该模块功能是显示管理档案。在xianshi()函数中定义变量 n 初值为0,用来记录文件中写入的数目。定义结构体变量temp和文件指针fp,以“r”方式打开文件“jilu”。如果fp指向NULL,则文件打开失败。否则依次输入编号、姓名、电话、薪水、家庭住址等。每输入一次使n值增1。最后,如果n为0说明文件中没有记录,否则输出文件中有n个记录。最后关闭文件。查询模块:该模块功能是查询管理档案。在chaxun()函数中定义字符变量c,用来选择按编号查询还是按姓名查询。定义文件指针fp,以“r”的方式打开”jilu”文件,如果fp指向NULL,则打开文件失败。否则输入“h”或“H”选择按编号查询,或者输入“m”或“M”选择按姓名查询。如果按姓名查询则调用chaxun_name()函数,定义整型变量flag,控制文件中是否确有此人。定义整型变量n初值为,用来说明文件中是否有记录。定义字符数组temp,用来输入该姓名下的记录。输入姓名后,如果n值为0说明文件中没有记录 ,如果flag为0说明文件中没有此人。如果按编号查询则调用chaxun_num()函数,定义整型变量flag,控制文件中是否确有此人。定义整型变量n初值为,用来说明文件中是否有记录。定义字符数组temp,用来输入该编号下的记录。输入编号后,如果n值为0说明文件中没有记录 ,如果flag为0说明文件中没有此人。最后关闭文件。修改模块 :该模块功能是修改管理档案。在xiugai()函数中定义字符变量c用来确定当输入编号重复时是否要重新输入。定义整型变量n记下文件中记下的数目。定义结构体指针变量find、p,结构体数组record,结构体变量temp.以“r”方式打开文件“jilu”,使p指向record首地址。每读入一个记录使n值增1,把p赋给find,让find记住修改位置。如果p指向record+n,说明记录中没有此人。则需要输入另一个编号,如果编号重复,则用”y”或”Y”或”n”或”N”选择是否要重新输入编号。用find找到需要修改的记录的位置,进行修改。最后关闭文件。添加模块:该模块功能是添加管理档案.在tianjia ()函数中定义字符变量c,用来选择当输入编号重复时是否要重新输入。定义整型变量n用来记下录入数目。定义结构体变量temp,结构体数组record,结构体指针p。定义文件指针fp,指向文件“jilu”。当fp没有指向文件末尾时,把添加的记录写到fp所指文件中。如果编号重复,用“n”或“N”选择放弃,用“y”或“Y”选择重新输入,进行输入。最后关闭文件。删除模块:该模块功能是删除管理档案信息。在shanchu()函数中定义字符变量c,用来接收“h”或“H”选择按编号删除,接受“m”或“M”选择按姓名删除。定义文件指针fp指向文件“jilu”。如果选择按编号删除,则调用shanchu_num()函数,定义字符数组tempnum10,定义整型变量n初值为0,定义结构体数组rcordN,结构体指针p,k。使p指向要删除记录,当k小于record+n时进行删除操作。否则输出无记录。如果选择按姓名删除,则调用shanchu_name()函数,定义字符数组tempname10,定义整型变量n初值为0,定义结构体数组rcordN,结构体指针p,k。使p指向要删除记录,当k小于record+n时进行删除操作。否则输出无记录。最后关闭文件。 排序模块:该模块功能是排序职工档案。在paixu()函数中定义字符变量c,用来选择按编号排序还是按姓名排序。定义整型变量i,j,k,n使n初值为0,用来记下写入记录数目。 定义结构体数组record,结构体指针p,结构体变量temp,定义文件指针fp,指向文件“jilu”。使p指向record的第一个记录,选择“s”或“S”按升序排列,选择“j”或“J”选择按降序排列。按所选择的方式排列。最后关闭文件。退出模块:该模块功能是退出管理档案。五、使用说明启动后屏幕上会提示登陆成功以及显示下面菜单,如果想要执行某项功能只需按对应的数字即可。 职工档案的创建:在主菜单中输入1则系统会进入新界面并自动提示你“请出入第一个记录”,完成后按回车键系统会逐一提示输入编号、姓名、电话号码、薪水、住址。输入所建立职工档案后选择Y(继续进行),系统返回主菜单。 职工档案的显示:在主菜单中输入2则系统会进入新界面,如图所示:职工档案的查询:在主菜单中输入3 则进入查询子菜单界面,此时在界面会提示你“按编号查询(h),还是按姓名查询(m)?”。输入h后则进入按编号查询职工档案信息,此时系统会自动提示你输入“你要查询的职工的编号”。输入编号后后会出现该职工的信息,输入m则按职工姓名查询。输入错误信息,显示查无此人。职工档案的修改:在主菜单中输入4,系统会自动提示你“请输入所要修改记录的编号”,输入新的编号后按回车键,按提示逐一输入所要修改的内容。职工档案的添加:在主菜单中输入5,进入后,系统会自动提示你要输入职工的信息,按照编号、姓名、电话号码、薪水、住址输入格式:输入职工的信息。职工档案的删除:在主菜单中输入6,系统界面会提示你“按编号删除(h),还是按姓名删除(m)?”。输入h则按编号删除记录,输入m则按姓名删除记录,输入错误信息显示 “对不起,无此人记录!”。 职工档案的排序:在主菜单中输入7,系统会自动提示你“按编号排序(h),按姓名排序(m)?”,输入h后系统会自动提示你“按升序(s),还是按降序(j)?”,输入s,系统会自动按升序排列并显示排列后职工档案信息。 退出系统: 在主菜单中输入0,系统会自动退出改程序。 注意事项:运行本程序之前,应当先运行附带的子程序(mima),为文件mima.date赋初值。化。六、源程序代码职工档案管理源程序 #include #include #include /*函数clrscr()及getch()等的头文件*/#define N 100struct student char num10; char name10;char tel10;char salary10;char address21; ;void shuchu();void chuangjian();void xianshi();void chaxun();/*函数chaxun_num与chaxun_name函数被chaxun调用*/void chaxun_num(FILE *fp);void chaxun_name(FILE *fp);void xiugai();void tianjia();void shanchu();/*函数shanchu_num与shanchu_name函数被mydelete调用*/void shanchu_num(FILE *fp);void shanchu_name(FILE *fp);void paixu();void sort_num();void sort_name();main()char choose,yes_no; do shuchu();/*显示菜单*/ printf( 请选择序号操作: ); choose=getch(); /*函数getch()的功能是从键盘上读入一个单独的字符,字符不回显在屏幕上*/ switch(choose) case 1:chuangjian();break; case 2:xianshi();break; case 3:chaxun();break; case 4:xiugai();break; case 5:tianjia();break; case 6:shanchu();break; case 7:paixu();break; case 0:break; default:printf(n %c违法选项!n,choose); if(choose=0) break; printf(n 要继续选择吗(Y/N)?n); do yes_no=getche(); while(yes_no!=Y & yes_no!= y & yes_no!=N & yes_no!=n);while(yes_no=Y| yes_no=y);void shuchu() /*显示菜单界面*/clrscr();printf(nnnnnn);printf( | -你好欢迎使用-|n);printf( | 请输入选项编号(07): |n);printf( |-|n);printf( | 1-职工档案的创建 |n);printf( | 2-职工档案的显示 |n);printf( | 3-职工档案的查询 |n);printf( | 4-职工档案的修改 |n);printf( | 5-职工档案的添加 |n);printf( | 6-职工档案的删除 |n);printf( | 7-职工档案的排序 |n);printf( | 0-退出 |n);printf( |-|n);/*创建模块*/*定义创建职工档案的函数*/void chuangjian()int i,n=0;struct student temp,stuN;FILE *fp; /*定义fp为文件指针*/for(i=0;i100;i+) printf(n 请输入第 %d 个记录:n,i+1); printf( 编号(用 # 号结束输入):);scanf(%s,&stui.num); printf( 姓名(用 # 号结束输入):);scanf(%s,&); printf( 电话号码(用 # 号结束输入):);scanf(%s,&stui.tel); printf( 薪水(用 # 号结束输入) :);scanf(%s,&stui.salary); printf( 住址(用 # 号结束输入):); scanf(%s,&stui.address); if(stui.num0=#|0=#|stui.tel0=#|stui.salary0=#|stui.address0=#) break; n+; fp=fopen(jilu.dat,w);if(fp=NULL)printf(n 打开文件失败!n);return;for(i=0;in;i+) if(fwrite(&stui,sizeof(struct student),1,fp)!=1) /*把结构体数组stui写入以fp为指针的文件中*/ printf( 文件写入出错!n);fclose(fp);/*显示模块*/*定义显示职工档案的函数*/void xianshi() int n=0,i=0;struct student stuN;FILE *fp;fp=fopen(jilu.dat,r);if(fp=NULL) printf(n 打开文件失败!n);return;clrscr();printf( 编号 姓名 电话号码 薪水 住址n);while(feof(fp)=0) fread(&stui,sizeof(struct student),1,fp); /*从以fp为指针的文件中读取数据赋给结构体数组stui*/ +i;+n; if(n=0) printf(n 文件无记录!n);else for(i=0;in-1;i+) printf(%12s%12s%12s%12s%12sn,stui.num,,stui.tel,stui.salary,stui.address); printf(n 文件总共有 %d 个记录!n,n-1); fclose(fp);/*查询模块*/*定义查询职工档案的函数*/void chaxun()char c;FILE *fp;fp=fopen(jilu.dat,r);if(fp=NULL) printf(n 打开文件失败!n);return;printf(n 按编号查询(h), 还是按姓名查询(m)?);c=getche();if(c=h|c=H) chaxun_num(fp);else if(c=m|c=M) chaxun_name(fp); else printf(n 非法字符!n);fclose(fp);/*定义按编号查询职工档案的函数*/void chaxun_num(FILE *fp)int flag=0,n=0;char tempnum10;struct student temp;printf(n 请输入要查询记录的编号:);scanf(%s,tempnum);while(feof(fp)=0) fread(&temp,sizeof(struct student),1,fp); n+; if(strcmp(tempnum,temp.num)=0) if(flag=0) printf( 编号 姓名 电话号码 薪水 住址n); printf(%12s%12s%12s%12s%12sn,temp.num,,temp.tel,temp.salary,temp.address);flag=1; break; if(n=0) printf(n 文件中无记录!n);else if(flag=0) printf(n 文件中无此记录!n);/*定义按姓名查询职工档案的函数*/void chaxun_name(FILE *fp)int flag=0,n=0;char tempname10;struct student temp;printf(n 请输入要查询记录的姓名:);scanf(%s,tempname);while(feof(fp)=0) fread(&temp,sizeof(struct student),1,fp); n+; if(strcmp(tempname,)=0) if(flag=0) printf( 编号 姓名 电话号码 薪水 住址n); printf(%12s%12s%12s%12s%12sn,temp.num,,temp.tel,temp.salary,temp.address); flag=1; break; if(n=0) printf(n 文件中无记录!n);else if(flag=0) printf(n 文件中无此人!n);/*修改模块*/*定义修改职工档案的函数*/void xiugai()char c; int n=0,i=0;struct student *find,temp,stuN,*p;FILE *fp;fp=fopen(jilu.dat,r);if(fp=NULL) printf(n 打开文件失败!n);return;while(feof(fp)=0) fread(&stui,sizeof(struct student),1,fp);i+;n+; fclose(fp); if(n=0) printf(n 文件中无记录!n);return; printf(n 请输入要修改记录的编号:);gets(temp.num); for(p=stu;pnum)=0) find=p;break; if(p=stu+n) printf(n 无此人!n);return; do printf(n 请输入正确的编号:); do gets(temp.num); while(strcmp(temp.num,)=0); printf( 请输入正确的姓名:);gets();printf( 请输入正确的电话号码:);gets(temp.tel);printf( 请输入正确的薪水:);gets(temp. salary);printf( 请输入正确的住址:);gets(temp.address); for(p=stu;pnum)=0)& (p!=find) printf(n 编号重复, 要重新输入吗(Y/N)?); do c=getche(); while(c!=Y&c!=y&c!=N&c!=n);putchar(n); break; if(p=stu+n) *find=temp; break; while(c=y|c=Y);fp=fopen(jilu.dat,w);if(fp=NULL)printf(n 打开文件失败!n);return;for(p=stu;pstu+n-1;p+) if(fwrite(p,sizeof(struct student),1,fp)!=1) printf( 文件写入出错n);fclose(fp);/*添加模块*/*定义添加职工档案的函数*/void tianjia() char c;int n=0,i=0;struct student temp,stuN;FILE *fp;fp=fopen(jilu.dat,r);if(fp=NULL) printf(n 打开文件失败!n);return;while(feof(fp)=0) fread(&stui,sizeof(struct student),1,fp);i+;n+;fclose(fp);do printf(n 请输入新记录的编号:); do scanf(%s,temp.num); while(strcmp(temp.num,)=0); printf( 请输入新记录的姓名:);scanf(%s,); printf( 请输入新记录的电话号码:);scanf(%s,temp.tel);printf( 请输入新记录的薪水:);gets(temp. salary);printf( 请输入新记录的住址:);gets(temp.address); for(i=0;in-1;i+) if(strcmp(temp.num,stui.num)=0) printf(n 编号重复 ,要重新输入吗(Y/N)?); do c=getche(); while(c!=Y& c!=y& c!=N &c!=n); putchar(n); break; if(i=n-1)stui=temp;break;while(c=y|c=Y);fp=fopen(jilu.dat,w);if(fp=NULL) printf(n 打开文件失败!n);return;for(i=0;in;i+) if(fwrite(&stui,sizeof(struct student),1,fp)!=1) printf(文件写入出错n);fclose(fp);/*删除模块*/*定义删除通信录的函数*/void shanchu()char c;FILE *fp;fp=fopen(jilu.dat,r);if(fp=NULL) printf(n 打开文件失败!n);return;printf(n 按编号删除(h), 还是按姓名删除(m)?);c=getche();if(c=h|c=H) shanchu_num(fp);else if(c=m|c=M) shanchu_name(fp);else printf(n 非法字符!n);fclose(fp);/*定义按编号删除通信录的函数*/void shanchu_num(FILE *fp)char tempnum10;int n=0,i=0,k;struct student stuN;while(feof(fp)=0) fread(&stui,sizeof(struct student),1,fp);i+;n+;fclose(fp);printf(n 请输入要删除记录的编号:);scanf(%s,tempnum);for(i=0;in-1;i+) if(strcmp(tempnum,stui.num)=0) break; /*找到要删除记录结束循环*/if(in-1) /*提前结束循环,说明找到此人*/ for(k=i;kn-1;k+) /*向左移一位,相当于删除记录*/ stuk=stuk+1;else printf(n 无此人!n);fp=fopen(jilu.dat,w);if(fp=NULL) printf(n 打开文件失败!n);return;for(i=0;in-2;i+) if(fwrite(&stui,sizeof(struct student),1,fp)!=1) printf( 文件写入出错n);fclose(fp);/*定义按姓名删除职工档案的函数*/void shanchu_name(FILE *fp)char tempname10;int n=0,i=0,k;struct student stuN;while(feof(fp)=0) fread(&stui,sizeof(struct student),1,fp);i+;n+;fclose(fp);printf(n 请输入要删除记录的姓名:);scanf(%s,tempname);for(i=0;in-1;i+) if(strcmp(tempname,)=0)break; /*找到要删除记录结束循环*/if(in-1) for(k=i;kn-1;k+) /*删除记录*/ stuk=stuk+1;else printf(n 无此人!n);fp=fopen(jilu.dat,w);if(fp=NULL) printf(n 打开文件失败!n);return;for(i=0;in-2;i+) if(fwrite(&stui,sizeof(struct student),1,fp)!=1) printf( 文件写入出错n);fclose(fp);/*排序模块*/*定义排序职工档案的函数*/void paixu()char c;FILE *fp;fp=fopen(jilu.dat,r);if(fp=NULL) printf(n 打开文件失败!n);return;fclose(fp);printf(n 按编号排序(h), 还是按姓名排序(m)?);c=getche();if(c=h|c=H) sort_num(); /*按编号排序*/else if(c=m|c=M) sort_name(); /*按姓名排序*/else printf(n 非法字符!n);/*定义按编号排序职工档案的函数*/void sort_num()int i=0,j,k,n=0;char c;struct student stuN,temp;FILE *fp;fp=fopen(jilu.dat,r);if(fp=NULL) printf(n 打开文件失败!n);return;while(feof(fp)=0) fread(&stui,sizeof(struct student),1,fp);i+;n+;fclose(fp);printf(n 按生序(s), 还是按降序(j)?n);c=getche();printf(n);if(c=s|c=S) /*按编号的升序排列*/ for(i=0;in-2;i+) /*选择法排序*/ k=i; for(j=i+1;j0)k=j; temp=stuk;stuk=stui;stui=temp; else if (c=j|c=J) /*按编号的降序排列*/ for(i=0;in-2;i+) /*选择法排序*/ k=i; for(j=i+1;jn-1;j+) if(strcmp(stuk.num,stu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- minus-Securinine-nitrate-生命科学试剂-MCE
- MB-11362-RG-7348-生命科学试剂-MCE
- 购买牛合同范本
- 工时制合同范本
- 建搅拌合同范本
- LANA-生命科学试剂-MCE
- csco黑色素瘤最近指南
- 2026年宣恩贡水融资担保有限公司公开招聘工作人员备考题库及一套参考答案详解
- 中国人民人寿保险股份有限公司2026年校园招聘备考题库及完整答案详解一套
- 2026年石家庄市长安区第十五幼儿园招聘备考题库及答案详解(新)
- 车辆采购服务投标方案(技术方案)
- 中级微观经济学复习试题和答案解析
- 酒店行业的信息安全培训方法
- 青岛版二年级上册除法单元复习课ppt
- 2023届高考专题复习:小说专题训练群体形象与个体形象(含答案)
- 等腰三角形复习课教案
- GB/T 19278-2018热塑性塑料管材、管件与阀门通用术语及其定义
- GB/T 19228.3-2012不锈钢卡压式管件组件第3部分:O形橡胶密封圈
- GB/T 15823-1995氦泄漏检验
- GB/T 13891-2008建筑饰面材料镜向光泽度测定方法
- GB/T 12346-2006腧穴名称与定位
评论
0/150
提交评论