收藏 分销(赏)

C语言专业课程设计实验总结报告.doc

上传人:丰**** 文档编号:2727381 上传时间:2024-06-05 格式:DOC 页数:28 大小:71.54KB 下载积分:10 金币
下载 相关 举报
C语言专业课程设计实验总结报告.doc_第1页
第1页 / 共28页
C语言专业课程设计实验总结报告.doc_第2页
第2页 / 共28页


点击查看更多>>
资源描述
C语言课程设计试验总结 一、需求分析: 1.需求概述 设计一个职员信息管理系统,使之能提供以下功效: (1)职员信息录入功效 (2)职员信息浏览功效 (3)职员信息删除功效 (4)职员信息修改功效 (5) 职员信息查询功效 2.需求说明 (1)职员信息包含:职员号、姓名、性别、出生年月、学历职务、工资、住址、电话,而且职员号要求不反复。 (2)录入职员信息要求用文件形式保留,并对其进行浏览、查询、修改、删除等基础操作。 (3)对职员信息分别按职员号、性别、姓名、工资四种方法进行查询,并返回全部符合条件职员信息。 (4)对职员信息修改应该逐一进行,一个职员信息修改不应影响其它职员信息。 (5)所设计系统应以菜单方法工作,应为用户提供清楚使用提醒,依据用户选择进行多种处理,并要求在此过程中能够尽可能兼容用户使用过程中异常情况。 二、总体设计 1.功效划分 该系统能够按功效进行模块划分,以下图所表示: 职员信息管理系统 菜单 信息输入 浏览信息 信息查询 信息修改 信息删除 职员号查询 性别查询 姓名查询 工资查询 其中: (1) 菜单选择模块完成用户选择,此模块也是职员信息管理系统入口,用户所要进行全部操作需要在此模块中选择,并调用相对应模块实现对应功效。 (2) 信息输入模块完成信息录入功效,输入信息包含:职员号、姓名、性别、出生年月、学历职务、工资、住址、电话。 (3) 信息浏览模块完成对全部职员信息显示。 (4) 信息查询模块分四种查询方法:按职员号查询、按性别查询、按姓名查询、按职务查询。而且输出相对应且符合要求职员信息。 (5) 信息修改模块完成是职员信息修改功效。 (6) 信息删除模块完成是职员信息删除功效。 2.数据结构 本系统中关键数据结构为职员信息,其中包含:职员号、姓名、性别、出生年月、学历职务、工资、住址、电话等,其中出生年月用结构体表示,其中又包含:出生年份、出生月份、出生日期。 3.程序步骤 系统实施应从功效菜单选择开始,依据用户选择进行后续处理,直到用户选择退出系统为止,其间应对用户选择做出判定及异常处理。系统步骤图以下图所表示: 是 是 是 是 是 否 否 否 否 结束 删除? 查询? 修改? 否 开始 菜单 输入? 浏览? 三、具体设计 1. 数据结构 (1)职员信息: struct Zg { char num[20]; //职员号 char name[15]; // 姓名 char sex; //性别 struct Birthday birthday; //出生年月 char xueli[10]; //学历 char position[15]; //职务 int wage; //工资 char address[20];住址 char phone[12]; //电话 }zg[N]; (2)出生年月 struct Birthday //出生年月 { int year; int month; int day; }; 2. 各个功效模块处理步骤 对应总体设计时系统模块图,各个功效模块处 步骤以下: (1) 菜单模块 清屏; 绘制菜单界面; 信息提醒,提醒用户选择对应序号; 判定选择序号是否正确; 返回变量值; (2) 信息录入模块 定义相关变量; 判定文件能否打开; 提醒需要输入职员个数; for(循环条件) { 提醒输入信息; 将信息写进文件; } 提醒是否退出该菜单; 关闭文件; (3) 浏览信息模块 定义相关变量; 判定文件能否打开; 输出全部职员信息; 关闭文件; (4) 信息查询模块 定义相关变量; 判定文件能否打开; do { 清屏; 输出查询菜单; 提醒用户选择对应序号; switch(变量) { 判定查询方法; } 提醒是否退出该菜单; }while(循环条件); (5) 按职员号查询模块 定义相关变量; 判定文件能否打开; do { 信息提醒; for(;循环条件;)       {          判定是否符合条件;          若符累计数器加1;          输出符合职员信息; } 判定计数器是否为0;  若为0,输出相关信息;  提醒是否退出该菜单; }while(循环条件); (6) 按性别查询模块   定义相关变量; 判定文件能否打开; do { 信息提醒; for(;循环条件;)       {          判定是否符合条件;          若符累计数器加1;          输出符合职员信息; } 判定计数器是否为0; 若为0,输出相关信息; 提醒是否退出该菜单; }while(循环条件); (7) 按姓名查询模块   定义相关变量; 判定文件能否打开; do { 信息提醒; for(;循环条件;)       {          判定是否符合条件;          若符累计数器加1;          输出符合职员信息; } 判定计数器是否为0; 若为0,输出相关信息; 提醒是否退出该菜单; }while(循环条件); (8) 按职务查询模块   定义相关变量; 判定文件能否打开; do {   信息提醒;   for(;循环条件;)         {            判定是否符合条件;            若符累计数器加1;            输出符合职员信息; } 判定计数器是否为0; 若为0,输出相关信息; 提醒是否退出该菜单;   }while(循环条件); (9) 信息删除模块     定义相关变量 判定能否打开文件 提醒信息; for(循环条件) { 判定是否是要删除职员; 若是则记标志变量为1; 若不是则将其写入临时文件; } 关闭相关文件; 判定标志变量值; 假如为1,则将源文件删除,并将临时文件重命名; 不然输出相关提醒信息; 提醒退出该菜单; (10) 信息修改模块 定义相关变量 判定能否打开文件 提醒信息; for(循环条件) { 判定是否是要修改职员; 若是则记标志变量为1,并将修改后信息写入临时文件; 若不是则将其写入临时文件; } 关闭相关文件; 判定标志变量值; 假如为1,则将源文件删除,并将临时文件重命名; 不然输出相关提醒信息; 提醒退出该菜单; 四、具体程序 # include<stdio.h> # include<stdlib.h> # include<conio.h> # include<string.h> # define N 100 void welcome();//欢迎界面 int menu();//菜单 void input();//输入函数 int pdnum(char num[20]);//判定职员号是否反复 int pdsex(char 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 num[20]; //职员号 char name[15]; // 姓名 char sex; //性别 struct Birthday birthday; //出生年月 char xueli[10]; //学历 char position[15]; //职务 int wage; //工资 char address[20]; //住址 char phone[12]; //电话 }zg[N]; int Number=0; /****************************主函数******************************/ int main() { fflush(stdin); welcome(); while(1) { switch(menu()) { case 1:input();break; case 2:output();break; case 3:search();break; case 4:del();break; case 5:xiugai();break; case 6:exit(0);break; } } return 0; } /******************************欢迎界面****************************/ void welcome() { system("cls"); printf("\n\t\5\5\3\3\3\3☆☆※★★※☆☆※★★※☆☆※★★※☆☆\3\3\3\3\3\3\3\3\3\3\3\3"); printf("\n\t\5\5\3\3※◆◆☆☆◆◆◆◆◆◆※☆☆※◆◆◆◆◆◆☆☆◆◆※\3\3"); printf("\n\t\5\5\3\3\3\3\3\3★★ ★★\3\3\3\3\3\3\3\3\3"); printf("\n\t\5\5\3\3\3\3\3☆★☆☆★★☆ 欢 迎 进 入 ☆☆★☆☆★★\3\3\3\3\3\3\3"); printf("\n\t\5\5\3\3\3\3\3\3★★ ★★\3\3\3\3\3\3\3\3\3"); printf("\n\t\5\5\3\3\3\3☆★☆☆★◆◆ 本 系 统 ◆◆★☆☆★☆\3\3\3\3\3\3"); printf("\n\t\5\5\3\3\3\3\3\3★★ ★★\3\3\3\3\3\3\3\3\3"); printf("\n\t\5\5\3\3\3\3\3\3☆☆※★★※☆☆※★★※☆☆※★★※☆☆\3\3\3\3\3\3\3\3\3\3"); printf("\n\t\5\5\3\3\3\3\3\3★★☆◆◆ 按任意键进入 ◆◆☆★★\3\3\3\3\3\3\3\3\3"); printf("\n\t\5\5\3\3\3\3☆☆※★★※☆☆※★★※☆☆※★★※☆☆\3\3\3\3\3\3\3\3\3\3\3\3\n"); fflush(stdin); getch(); } /******************************菜单****************************/ int menu() { int n; system("cls"); printf("\t\t※◆※◆※◆※ 菜◆单 ※◆※◆※◆※\n"); printf("\t\t※ ※\n"); printf("\t\t※ 1.录入 2.浏览 ※\n"); printf("\t\t※ 3.查询 4.删除 ※\n"); printf("\t\t※ 5.修改 6.退出 ※\n"); printf("\t\t※ ※\n"); printf("\t\t※◆※◆※◆※◆※◆※◆※◆※◆※※\n"); printf("\n\t\t--请输入您选择序号(1-6):[ ]--\b\b\b\b"); fflush(stdin); scanf("%d",&n); while(1) { if(n<1 || n>6) { printf("\t\t-----输入错误!请重新选择:[ ]----\b\b\b\b\b\b"); scanf("%d",&n); } else break; } return n; } /******************************读取文件中数据个数****************************/ int dq() { FILE *fp=NULL; int i=0; fp=fopen("职员信息记录表.txt","rb"); while(fread(&zg[i],sizeof(struct Zg),1,fp)) i++; fclose(fp); return i; } /******************************录入信息****************************/ void input() { 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;i<number;i++) { printf("\t---请输入第%d个职员信息:---",i+1); do { printf("\n请输入职员号:");scanf("%s",&zg[i].num); flage=pdnum(zg[i].num); }while(flage==1); printf("请输入姓名:");scanf("%s",&zg[i].name); do { printf("请输入性别(f/m):");scanf("%s",&zg[i].sex); flage=pdsex(zg[i].sex); }while(flage==0); printf("请输入出生年月如( 6 7):");scanf("%d%d%d",&zg[i].birthday.year,&zg[i].birthday.month,&zg[i].birthday.day); printf("请输入学历(junior,high,college,master,doctor):");scanf("%s",&zg[i].xueli); printf("请输入职务:");scanf("%s",&zg[i].position); printf("请输入工资:");scanf("%d",&zg[i].wage); printf("请输入住址:");scanf("%s",&zg[i].address); printf("请输入电话:");scanf("%s",&zg[i].phone); fwrite(&zg[i],sizeof(struct Zg),1,fp); } printf("\t★★★★按任意键退出录入菜单★★★★\n"); getch(); fclose(fp); } /******************************判定职员号是否反复****************************/ int pdnum(char num[20]) { FILE *fp; struct Zg temp; int i,flage=0; if((fp=fopen("职员信息记录表.txt","rb"))==NULL) { printf("文件 职员信息记录表.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); } /******************************输出所查询信息****************************/ void dayin(int i) { printf("职员号:%s\n",zg[i].num); printf("姓名:%s\n",zg[i].name); printf("性别:%c\n",zg[i].sex); printf("出生日期:%d %d %d\n",zg[i].birthday.year,zg[i].birthday.month,zg[i].birthday.day); printf("学历:%s\n",zg[i].xueli); printf("职务:%s\n",zg[i].position); printf("工资:%d\n",zg[i].wage); printf("住址:%s\n",zg[i].address); printf("电话:%s\n\n",zg[i].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;i<Number;i++) { dayin(i); count++; } printf("\t共有%d个职员。\n",count); printf("\t---按任意键退出浏览菜单---\n"); getch(); fclose(fp); } /******************************查询信息****************************/ void search() { int choice; char ch; do { system("cls"); printf("\n\t★★★★★★★★★★★★★★★★\n"); printf("\t★ 请输入你查询方法 ★\n"); printf("\t★ 1.职员号 2.性别 ★\n"); printf("\t★ 3.姓名 4.职务 ★\n"); printf("\t★★★★★★★★★★★★★★★★\n"); scanf("%d",&choice); switch(choice) { case 1:searchzgnum();break; case 2:searchsex();break; case 3:searchname();break; case 4:searchposition();break; default:printf("\t输入错误,没有该功效!请返回重新选择");break; } printf("\n\n\t◇◇◇是否退出查询菜单(y/n)?◇◇◇\n"); fflush(stdin); ch=getchar(); }while(ch=='Y'||ch=='y'); } /******************************按职员号查询信息****************************/ void searchzgnum() { FILE *fp; char ch; int count=0,i; char temp[20]; Number=dq(); if((fp=fopen("职员信息记录表.txt","rb"))==NULL) { printf("\t----文件 职员信息记录表.txt 不能打开!----"); getch(); exit(1); } do { printf("\t请输入你要查询职员号:"); scanf("%s",&temp); for(i=0;i<Number;i++) { if(strcmp(zg[i].num,temp)==0) { count++; dayin(i); } } if(count==0) /*count=0说明没有该职员号职员*/ printf("\t没有该工号职员!\n"); printf("\n\t★★★是否继续按职员号查询(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"))==NULL) { printf("\t----文件 职员信息记录表.txt 打不开!----"); getch(); exit(1); } do { printf("\t请输入你要查询性别:"); fflush(stdin); scanf("%c",&sex); for(i=0;i<Number;i++) { if(zg[i].sex==sex) { count++; dayin(i); } } if(count==0) printf("\t没有该性别职员!\n"); printf("\n\t★★★是否继续按性别查询(y/n)?★★★"); fflush(stdin); ch=getchar(); }while(ch=='y' ||ch=='Y'); } /******************************按姓名查询信息****************************/ void searchname() { FILE *fp; int count=0,i; char name[15]; 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;i<Number;i++) { if(strcmp(zg[i].name,name)==0) { count++; dayin(i); } } if(count==0) printf("\t没有该名字职员!\n"); printf("\n\t★★★是否继续按姓名查询(y/n)?★★★"); fflush(stdin); ch=getchar(); }while(ch=='y' ||ch=='Y'); } /******************************按职务查询信息****************************/ void searchposition() { FILE *fp; int count=0,i; char position[15]; char ch; Number=dq(); if((fp=fopen("职员信息记录表.txt","rb"))==NULL) { printf("\t----文件 职员信息记录表.txt 打不开!----"); getch(); exit(1); } do { printf("\t请输入你要查询职务:"); fflush(stdin); scanf("%s",&position); for(i=0;i<Number;i++) { if(strcmp(zg[i].position,position)==0) { count++; dayin(i); } } if(count==0) printf("\t没有该职务职员!\n"); printf("\n\t★★★是否继续按职务查询(y/n)?★★★"); fflush(stdin); ch=getchar(); }while(ch=='y' ||ch=='Y'); } /******************************删除信息****************************/ void del() { FILE *fp,*fp2; int i,flage=0; char number[20],ch; Number=dq(); if((fp=fopen("职员信息记录表.txt","rb"))==NULL) { 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;i<Number;i++) { if(strcmp(zg[i].num,number)==0) { printf("\t**你确定删除该职员信息(y/n)?**"); fflush(stdin); ch=getchar(); if(ch=='y'||ch=='Y') { flage=1; } else fwrite(&zg[i],sizeof(struct Zg),1,fp2); } else fwrite(&zg[i],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("\n\t★
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服