《C语言专业课程设计实验总结报告.doc》由会员分享,可在线阅读,更多相关《C语言专业课程设计实验总结报告.doc(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C语言课程设计试验总结一、需求分析:1.需求概述 设计一个职员信息管理系统,使之能提供以下功效: (1)职员信息录入功效 (2)职员信息浏览功效 (3)职员信息删除功效 (4)职员信息修改功效 (5) 职员信息查询功效 2.需求说明 (1)职员信息包含:职员号、姓名、性别、出生年月、学历职务、工资、住址、电话,而且职员号要求不反复。 (2)录入职员信息要求用文件形式保留,并对其进行浏览、查询、修改、删除等基础操作。 (3)对职员信息分别按职员号、性别、姓名、工资四种方法进行查询,并返回全部符合条件职员信息。(4)对职员信息修改应该逐一进行,一个职员信息修改不应影响其它职员信息。(5)所设计系统
2、应以菜单方法工作,应为用户提供清楚使用提醒,依据用户选择进行多种处理,并要求在此过程中能够尽可能兼容用户使用过程中异常情况。二、总体设计 1.功效划分 该系统能够按功效进行模块划分,以下图所表示:职员信息管理系统菜单信息输入浏览信息信息查询信息修改信息删除职员号查询性别查询姓名查询工资查询其中:(1) 菜单选择模块完成用户选择,此模块也是职员信息管理系统入口,用户所要进行全部操作需要在此模块中选择,并调用相对应模块实现对应功效。(2) 信息输入模块完成信息录入功效,输入信息包含:职员号、姓名、性别、出生年月、学历职务、工资、住址、电话。(3) 信息浏览模块完成对全部职员信息显示。(4) 信息查
3、询模块分四种查询方法:按职员号查询、按性别查询、按姓名查询、按职务查询。而且输出相对应且符合要求职员信息。(5) 信息修改模块完成是职员信息修改功效。(6) 信息删除模块完成是职员信息删除功效。 2.数据结构 本系统中关键数据结构为职员信息,其中包含:职员号、姓名、性别、出生年月、学历职务、工资、住址、电话等,其中出生年月用结构体表示,其中又包含:出生年份、出生月份、出生日期。 3.程序步骤 系统实施应从功效菜单选择开始,依据用户选择进行后续处理,直到用户选择退出系统为止,其间应对用户选择做出判定及异常处理。系统步骤图以下图所表示: 是是是是是否否否否结束删除?查询?修改?否开始菜单输入?浏览
4、?三、具体设计 1. 数据结构 (1)职员信息:struct Zg char num20; /职员号 char name15; / 姓名 char sex; /性别 struct Birthday birthday; /出生年月 char xueli10; /学历 char position15; /职务 int wage; /工资 char address20;住址 char phone12; /电话zgN; (2)出生年月 struct Birthday /出生年月 int year; int month; int day; ; 2. 各个功效模块处理步骤 对应总体设计时系统模块图,各个功
5、效模块处 步骤以下:(1) 菜单模块清屏;绘制菜单界面;信息提醒,提醒用户选择对应序号;判定选择序号是否正确;返回变量值;(2) 信息录入模块 定义相关变量; 判定文件能否打开; 提醒需要输入职员个数; for(循环条件) 提醒输入信息; 将信息写进文件;提醒是否退出该菜单;关闭文件;(3) 浏览信息模块 定义相关变量; 判定文件能否打开; 输出全部职员信息; 关闭文件;(4) 信息查询模块 定义相关变量; 判定文件能否打开; do 清屏; 输出查询菜单; 提醒用户选择对应序号; switch(变量) 判定查询方法; 提醒是否退出该菜单; while(循环条件); (5) 按职员号查询模块 定
6、义相关变量; 判定文件能否打开; do 信息提醒; for(;循环条件;)判定是否符合条件;若符累计数器加;输出符合职员信息;判定计数器是否为;若为,输出相关信息;提醒是否退出该菜单; while(循环条件);(6) 按性别查询模块定义相关变量; 判定文件能否打开; do 信息提醒; for(;循环条件;)判定是否符合条件;若符累计数器加;输出符合职员信息;判定计数器是否为;若为,输出相关信息;提醒是否退出该菜单; while(循环条件);(7) 按姓名查询模块定义相关变量; 判定文件能否打开; do 信息提醒; for(;循环条件;)判定是否符合条件;若符累计数器加;输出符合职员信息;判定计
7、数器是否为;若为,输出相关信息;提醒是否退出该菜单; while(循环条件);(8) 按职务查询模块定义相关变量; 判定文件能否打开; do 信息提醒; for(;循环条件;)判定是否符合条件;若符累计数器加;输出符合职员信息;判定计数器是否为;若为,输出相关信息;提醒是否退出该菜单; while(循环条件);(9) 信息删除模块定义相关变量 判定能否打开文件 提醒信息; for(循环条件) 判定是否是要删除职员; 若是则记标志变量为1; 若不是则将其写入临时文件;关闭相关文件;判定标志变量值;假如为1,则将源文件删除,并将临时文件重命名;不然输出相关提醒信息;提醒退出该菜单; (10) 信息
8、修改模块 定义相关变量 判定能否打开文件 提醒信息; for(循环条件) 判定是否是要修改职员; 若是则记标志变量为1,并将修改后信息写入临时文件; 若不是则将其写入临时文件;关闭相关文件;判定标志变量值;假如为1,则将源文件删除,并将临时文件重命名;不然输出相关提醒信息;提醒退出该菜单;四、具体程序 # include# include# include# include# define N 100void welcome();/欢迎界面int menu();/菜单void input();/输入函数int pdnum(char num20);/判定职员号是否反复int pdsex(char
9、 ch);/判定输入性别是否符合要求void output();/输出函数void dayin(int i);/输出所查询信息int dq();/读取文件中数据个数void search();/查询函数void searchzgnum();/按职员号查询void searchsex();/按性别查询void searchname();/按姓名查询void searchposition();/按职务查询void del();/删除函数void xiugai();/修改函数struct Birthday /出生年月int year;int month;int day;struct Zg char
10、num20; /职员号 char name15; / 姓名 char sex; /性别 struct Birthday birthday; /出生年月 char xueli10; /学历 char position15; /职务 int wage; /工资 char address20; /住址 char phone12; /电话zgN;int Number=0;/*主函数*/int main() fflush(stdin);welcome();while(1)switch(menu() case 1:input();break; case 2:output();break; case 3:s
11、earch();break; case 4:del();break; case 5:xiugai();break; case 6:exit(0);break;return 0;/*欢迎界面*/void welcome()system(cls); printf(nt553333333333333333); printf(nt553333); printf(nt55333333 333333333); printf(nt5533333 欢 迎 进 入 3333333); printf(nt55333333 333333333); printf(nt553333 本 系 统 333333); pri
12、ntf(nt55333333 333333333); printf(nt553333333333333333); printf(nt55333333 按任意键进入 333333333); printf(nt553333333333333333n);fflush(stdin);getch();/*菜单*/int menu()int n;system(cls);printf(tt 菜单 n);printf(tt n);printf(tt 1.录入 2.浏览 n);printf(tt 3.查询 4.删除 n);printf(tt 5.修改 6.退出 n);printf(tt n);printf(tt
13、n);printf(ntt-请输入您选择序号(1-6): -bbbb);fflush(stdin); scanf(%d,&n);while(1)if(n6)printf(tt-输入错误!请重新选择: -bbbbbb);scanf(%d,&n); elsebreak;return n;/*读取文件中数据个数*/int dq() FILE *fp=NULL; int i=0; fp=fopen(职员信息记录表.txt,rb); while(fread(&zgi,sizeof(struct Zg),1,fp) i+; fclose(fp); return i;/*录入信息*/void input()
14、FILE *fp;int i,number,flage;if(fp=fopen(职员信息记录表.txt,ab)=NULL)printf(文件 职员信息记录表.txt 不能打开!);getch();exit(1);printf(t请输入录入职员数:);scanf(%d,&number); for(i=0;inumber;i+) printf(t-请输入第%d个职员信息:-,i+1); do printf(n请输入职员号:);scanf(%s,&zgi.num); flage=pdnum(zgi.num); while(flage=1); printf(请输入姓名:);scanf(%s,&zgi.
15、name); do printf(请输入性别(f/m):);scanf(%s,&zgi.sex); flage=pdsex(zgi.sex); while(flage=0);printf(请输入出生年月如( 6 7):);scanf(%d%d%d,&zgi.birthday.year,&zgi.birthday.month,&zgi.birthday.day); printf(请输入学历(junior,high,college,master,doctor):);scanf(%s,&zgi.xueli); printf(请输入职务:);scanf(%s,&zgi.position); print
16、f(请输入工资:);scanf(%d,&zgi.wage); printf(请输入住址:);scanf(%s,&zgi.address); printf(请输入电话:);scanf(%s,&zgi.phone); fwrite(&zgi,sizeof(struct Zg),1,fp);printf(t按任意键退出录入菜单n);getch(); fclose(fp);/*判定职员号是否反复*/int pdnum(char num20) FILE *fp; struct Zg temp; int i,flage=0; if(fp=fopen(职员信息记录表.txt,rb)=NULL) printf
17、(文件 职员信息记录表.txt 不能打开!); getch(); exit(1); while(fread(&temp,sizeof(struct Zg),1,fp)=1) if(strcmp(temp.num,num)=0) printf(t此职员号已存在!请重新输入); flage=1; break; return(flage);/*判定输入性别是否正确*/int pdsex(char ch) int flage; if(ch=f | ch=m) flage=1; else flage=0; if(flage=0) printf(t*输入错误!请重新输入n*); return(flage)
18、;/*输出所查询信息*/void dayin(int i) printf(职员号:%sn,zgi.num); printf(姓名:%sn,zgi.name); printf(性别:%cn,zgi.sex); printf(出生日期:%d %d %dn,zgi.birthday.year,zgi.birthday.month,zgi.birthday.day); printf(学历:%sn,zgi.xueli); printf(职务:%sn,zgi.position); printf(工资:%dn,zgi.wage); printf(住址:%sn,zgi.address); printf(电话:
19、%snn,zgi.phone);/*输出全部信息*/void output() FILE *fp; int count=0,i; Number=dq(); if(fp=fopen(职员信息记录表.txt,rb)=NULL) printf(文件 职员信息记录表.txt 不能打开!); getch(); exit(1); for(i=0;iNumber;i+) dayin(i); count+; printf(t共有%d个职员。n,count); printf(t-按任意键退出浏览菜单-n); getch(); fclose(fp);/*查询信息*/void search() int choice
20、; char ch; do system(cls); printf(ntn); printf(t 请输入你查询方法 n); printf(t 1.职员号 2.性别 n); printf(t 3.姓名 4.职务 n); printf(tn); scanf(%d,&choice); switch(choice) case 1:searchzgnum();break; case 2:searchsex();break; case 3:searchname();break; case 4:searchposition();break; default:printf(t输入错误,没有该功效!请返回重新选
21、择);break; printf(nnt是否退出查询菜单(y/n)?n); fflush(stdin); ch=getchar(); while(ch=Y|ch=y);/*按职员号查询信息*/void searchzgnum()FILE *fp;char ch; int count=0,i; char temp20;Number=dq(); if(fp=fopen(职员信息记录表.txt,rb)=NULL) printf(t-文件 职员信息记录表.txt 不能打开!-); getch(); exit(1);do printf(t请输入你要查询职员号:); scanf(%s,&temp); fo
22、r(i=0;iNumber;i+) if(strcmp(zgi.num,temp)=0) count+; dayin(i); if(count=0) /*count=0说明没有该职员号职员*/ printf(t没有该工号职员!n); printf(nt是否继续按职员号查询(y/n)?); fflush(stdin); ch=getchar();while(ch=y |ch=Y);/*按性别查询信息*/void searchsex() FILE *fp; int count=0,i; char sex,ch; Number=dq(); if(fp=fopen(职员信息记录表.txt,rb)=NU
23、LL) printf(t-文件 职员信息记录表.txt 打不开!-); getch(); exit(1); do printf(t请输入你要查询性别:); fflush(stdin); scanf(%c,&sex); for(i=0;iNumber;i+) if(zgi.sex=sex) count+; dayin(i); if(count=0) printf(t没有该性别职员!n); printf(nt是否继续按性别查询(y/n)?); fflush(stdin); ch=getchar(); while(ch=y |ch=Y);/*按姓名查询信息*/void searchname() FI
24、LE *fp; int count=0,i; char name15; char ch; Number=dq(); if(fp=fopen(职员信息记录表.txt,rb)=NULL) printf(t-文件 职员信息记录表.txt 打不开!-); getch(); exit(1); do printf(t请输入你要查询姓名:); fflush(stdin); scanf(%s,&name); for(i=0;iNumber;i+) if(strcmp(zgi.name,name)=0) count+; dayin(i); if(count=0) printf(t没有该名字职员!n); prin
25、tf(nt是否继续按姓名查询(y/n)?); fflush(stdin); ch=getchar(); while(ch=y |ch=Y);/*按职务查询信息*/void searchposition() FILE *fp; int count=0,i; char position15; char ch; Number=dq(); if(fp=fopen(职员信息记录表.txt,rb)=NULL) printf(t-文件 职员信息记录表.txt 打不开!-); getch(); exit(1); do printf(t请输入你要查询职务:); fflush(stdin); scanf(%s,&
26、position); for(i=0;iNumber;i+) if(strcmp(zgi.position,position)=0) count+; dayin(i); if(count=0) printf(t没有该职务职员!n); printf(nt是否继续按职务查询(y/n)?); fflush(stdin); ch=getchar(); while(ch=y |ch=Y);/*删除信息*/void del() FILE *fp,*fp2; int i,flage=0; char number20,ch; Number=dq(); if(fp=fopen(职员信息记录表.txt,rb)=N
27、ULL) printf(文件 职员信息记录表.txt 打不开!n); getch(); exit(1); if(fp2=fopen(temp.txt,wb)=NULL) printf(文件 temp.txt 打不开!n); getch(); exit(1); printf(请输入你要删除职员号:); scanf(%s,number); for(i=0;iNumber;i+) if(strcmp(zgi.num,number)=0) printf(t*你确定删除该职员信息(y/n)?*); fflush(stdin); ch=getchar(); if(ch=y|ch=Y) flage=1; else fwrite(&zgi,sizeof(struct Zg),1,fp2); else fwrite(&zgi,sizeof(struct Zg),1,fp2); fclose(fp); fclose(fp2); if(flage=1) remove(职员信息记录表.txt); rename(temp.txt,职员信息记录表.txt); printf(t*删除成功!*n); else printf(t*未找到该职员号,删除失败!*n); fclose(fp); fclose(fp2); printf(nt