《c语言课程设计》总体计划及文档
一:总体计划
1、 题目确定及十天计划;
2、 写文档•确定数据结构、返回值、写出详细设计思路;
3、 菜单函数;
4、 录入函数;
5、 浏览函数;
6、 查询函数;
7、 修改函数;
8、 删除函数;
9、 写课程设计说明书;
10、 创新阶段•增加功能•
二:文档
1:需求分析
1.1编写目的
1.2需求概述
1.3需求说明
2:总体设计
2.1 功能模块图
2.2 数据结构
2.3程序流程图
3:详细设计
3.1数据结构
3.2各个功能模块的处理流程
1、需求分析
1.1编写目的:
通过对用户需求进行调查及分析,写出文档需求分析。它可以作为项目设计的基本准则,也可以作为系统分析员进行系统分析和测试人员进行测试的手册。
1.2 需求概述:
设计一个职工信息管理系统,使之有以下功能:
(1)职工信息的录入功能
(2)职工信息的浏览功能
(3)职工信息查询功能
(4)职工信息删除功能
(5)职工信息修改功能
1.3需求说明
(1)职工信息包括职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等(职工号不重复)。
(2)录入职工信息要求以文件形式保存,并可对其浏览、查询、修改. 删除等基本操作。
(3)职工信息的显示要求有一定的规范格式。
(4)对职工信息按照编号和姓名另种方式查询
(5)职工信息修改逐个进行,修改不影响其他职工信息
(6)所设计的系统以菜单方式工作,兼容异常情况
2 、总体设计
2.1 功能模块图:
其中:
(1) 菜单选择模块完成用户命令的接收,此模块也是职工信息管理系统的入口,用户所要进行的各种操作均需在此模块中进行选择,并进而调用其他模块实现相应的功能。
(2) 信息输入模块完成职工信息的输入功能,输入信息包括职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等。
(3) 信息浏览模块完成已录入职工信息的显示。
(4) 信息查询模块完成职工信息的查询,查询时对应有按编号查询和按姓名查询两种方式。
(5) 信息修改模块完成职工信息的修改功能。
(6) 信息删除模块完成职工信息的删除功能。
2.2数据结构
本系统主要数据结构:职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等,在处理过程中各项可以作为一个职工不同属性来处理。
2.3程序流程图:
系统执行应从功能菜单开始,依据用户选择进行后续处理,直到用户退出为止,期间对用户的选择做出判断和异常处理,系统流程图如下:
3详细设计:
编写目的
根据 总体设计说明书,在总体设计说明说之上,对系统进行详细设计,以便下一步进行程序编码工作。
详细设计
3.1数据结构
(1) 性别:enum Sex {male,female};
(2) 学历:enum Education{high,junior,college,master,doctor};
(3) 日期:
Struct date
{
Int year;
Int month;
Int day;
};
(4)职工信息;
Struct Info
{
char num[5]; /*职工号*/
char name[8]; /*姓名*/
enum Sex sex; /*性别*/
struct Date birthday; /*出生年月*/
enum Education education; /*学历*/
char duty[8]; /*职务*/
double wage; /*工资*/
char addr[12]; /*地址*/
char phone[8]; /*电话*/
};
3.2各个功能模块的处理流程
对应于总体设计时的系统模块图,各个功能模块的处理流程如下:
(1)信息输入模块
打开职工信息文件;
While(继续输入)
{
读入职工信息;
将读入的信息添加到职工信息文件中;
提示是否继续输入;
}
关闭职工信息文件;
(2)信息浏览模块
打开职工信息文件;
While(不到文件结束)
{
从文件中顺序读出一个职工的信息;
按指定格式输出该职工的信息;
}
关闭职工信息文件;
(3)信息查询模块
While(继续查询)
{
If(按编号查询)
{
读入查询的职工编号;
打开职工信息文件;
While(不到文件结束)
{
顺序读出一个职工的信息;
If(该职工信息的编号符合条件)
输出该职工的信息;
}
关闭职工信息文件;
提示共有几条符合条件的记录;
}
else if(按姓名查询)
{
读入查询的职工姓名;
打开职工信息文件;
while(不到文件结束)
{
顺序读出一个职工的信息;
If(该职工信息的姓名符合条件)
输出该职工的信息;
}
关闭职工信息文件;
提示共有几条符合条件的记录;
}
else
提示输入不合适;
提示是否继续查询;
}
(4)信息修改模块
while (继续修改)
{
打开职工信息文件;
打开临时文件;
提示并读入待修改的职工的编号;
while (不到文件结束)
{
顺序读出一个职工的信息;
if (该职工信息的编号符合条件)
将职工的信息进行修改;
将职工的信息写入临时文件中;
}
关闭原信息文件;
关闭临时文件;
删除原信息文件;
将临时文件的名字改为原信息文件的名字;
}
(5)信息删除模块
While(继续删除)
{
提示并读入待删除的职工号;
打开职工信息文件;
查找是否有符合条件的职工记录;
If(有符合条件的记录)
{
创建一个新的临时文件;
While(原信息文件中记录未读完)
{
读出原信息文件中的下一条记录;
If(此条记录不是待删除记录)
写入临时文件中去;
}
关闭原文件信息;
关闭临时文件;
删除原信息文件;
将临时文件的名字改为原信息文件的名字;
}
Else
提示没有符合的记录存在;
}
(6)菜单选择模块
给出信息提示;
清屏;
绘制菜单(包含输入 显示 查询 修改 删除 退出 );
提示菜单选择并读入到变量;
返回变量的值;
#include
#include
#include
#include
struct Info
{
char num[10];/*职工号*/
char name[15];/*姓名*/
char sex[3];/*性别*/
char education[20] ;/*文化程度*/
char phone[20];/*电话*/
char duty[20];/*职务*/
char addr[30];/*住址*/
double wage ; /*工资*/
};
/*菜单函数*/
char menu()
{
char n;
system("CLS"); /*清屏函数 其头文件为“#include
system("color 0A"); /*屏幕和字体颜色控制*/
printf("欢迎进入系统:\n");
printf("\t\t\t 职工信息管理系统\n");
printf("\t******************************菜单*****************************\n");
printf("\t***************************************************************\n");
printf("\t|*********** ***********|\n");
printf("\t|******* ******|\n");
printf("\t|**** 1.职工信息录入 2.职工信息显示 ****|\n");
printf("\t|**** ****|\n");
printf("\t|**** 3.职工信息查询 4.职工信息删除 ****|\n");
printf("\t|**** ****|\n");
printf("\t|**** 5.职工信息修改 6.退出 ****|\n");
printf("\t|********* XX制作 ********|\n");
printf("\t***************************************************************\n");
printf("\t***************************************************************\n");
printf("选择1-6:[ ]\b\b");
while(1)
{
n=getchar();
if(n<'1'||n>'6')printf("输入错误,请重新输入1-6:[ ]\b\b");
else
break;
}return n;
}
void append() /*信息输入函数*/
{
struct Info info;
FILE *fp;
char ch;
char temp[10];
if((fp=fopen("f:\\inform.txt","ab"))==NULL)
{
printf("\tCan't open the inform file!");
getch();
exit(1);
}
do
{
printf("\t职工号:");
fflush(stdin); /*清除缓冲区域*/
gets(info.num);
printf("\t姓名:");gets(info.name);
printf("\t性别:");gets(info.sex);
printf("\t文化程度:"); gets(info.education);
printf("\t工资:");gets(temp); info.wage=atof(temp);
printf("\t职务:");gets(info.duty);
printf("\t家庭住址:");gets(info.addr);
printf("\t联系电话:");gets(info.phone);
fwrite(&info,sizeof(info),1,fp);
printf("\tAny more?(Y/N)):[ ]\b\b");
ch=getchar();getchar();
}while(ch=='Y'||ch=='y');
fclose(fp);
}
void print1()
{
printf("工号\t""姓名\t""性别\t""文化程度\t""职务\t""工资\t""地址\t""电话\n");
}
void print2(struct Info info)
{
printf("%-8s%-10s",info.num,info.name);
printf("%-8s%-14s",info.sex,info.education);
fflush(stdin); /*清除缓冲区域*/
printf("%-8s%-8.2lf",info.duty,info.wage);
printf("%-8s%-8s\n",info.addr,info.phone);
}
void display() /*职工信息显示函数*/
{
struct Info info;
FILE * fp;
int total=0;
if((fp=fopen("f:\\inform.txt","rb"))==NULL)
{
printf("\tCan not open the inform file!");
getch();
exit(1);
}
while(fread(&info,sizeof(info),1,fp)==1)
{
total++;
if(total==1)print1();
print2(info);
if((total!=0)&&(total%5==0))
{
printf("\n\n\tPress any key to continue......");
getch();
puts("\n\n");
print1();
}
}
fclose(fp);
printf("\n\n\t一共有%d个信息!!!",total);
getch();
}
void search()/*信息查询函数*/
{
char f;
struct Info info;
FILE * fp;
int flag; /*flag为1按编号查询,flag为2按姓名查询*/
int total=0 ;/*记录符合条件的纪录的个数*/
if((fp=fopen("f:\\inform.txt","rb"))==NULL)
{
printf("\t打开文件失败!");
getch();
exit(1);
}
do
{
rewind(fp);
printf("\n\n查询(1:工号 2:姓名):[ ]\b\b");
while(1)
{
scanf("%d",&flag);getchar();
if(flag<1||flag>2)
printf("输入错误!!!请重新输入(1:工号 2:姓):[ ]\b\b");
else
break;
}
if(flag==1) /*按编号进行查询*/
{
char ch[10];
printf("请输入你想查找的职工号:");
gets(ch);
total=0; /*符合条件的记录数*/
while(fread(&info, sizeof(info),1,fp)==1)
if(strcmp(ch,info.num)==0)
{
total++;
if(total==1)
print1();
print2(info);
}
}
else /*按姓名进行查询*/
{
printf("请输入你想查找的职工的姓名:");
char ch[15];
gets(ch);
total=0;
while(fread(&info,sizeof(info),1,fp)==1)
if(strcmp(ch,info.name)==0)
{
total++;
if(total==1)print1();
print2(info);
}
}
printf("\n\n\tT一共有 %d 条记录!\n",total);
printf("要继续查找吗?(Y/N):[ ]\b\b");
f=getchar();getchar();
}while(f=='Y'||f=='y');
fclose(fp);
}
void Delete() /*职工信息删除函数*/
{
struct Info info;
FILE *fp1,*fp2;
int flag;
char ch[10];
char f;
do
{
if((fp1=fopen("f:\\inform.txt","rb"))==NULL)
{
printf("\t文件打开失败!");
getch();
exit(1);
}
if((fp2=fopen("f:\\temp.txt","wb"))==NULL)
{
printf("\t文件打开失败!");
getch();
exit(1);
}
printf("请输入你要删除的职工号:");
fflush(stdin); /*清除缓冲区域*/
gets(ch);
flag=0;
while(fread(&info,sizeof(info),1,fp1)==1)
{
if(strcmp(ch,info.num)==0)
{
print1();
print2(info);
fflush(stdin);
flag=1;
continue;
}
fwrite(&info,sizeof(info),1,fp2);
}
fclose(fp1);
fclose(fp2);
if(flag==1)
{
printf("删除成功!\n");
remove("f:\\inform.txt");
rename("f:\\temp.txt","f:\\inform.txt");
}
else
printf("找不到记录!\n");
printf("还要继续删除吗?(Y/N):[ ]\b\b");
f=getchar();
getchar();
}while(f=='Y'||f=='y');
}
void modify() /*职工信息修改函数*/
{
struct Info info;
FILE *fp1,*fp2;
int flag;
char ch[10];
char f;
char temp[10];
do
{
if((fp1=fopen("f:\\inform.txt","rb"))==NULL)
{
printf("\t文件打开失败!");
getch();
exit(1);
}
if((fp2=fopen("f:\\temp.txt","wb"))==NULL)
{
printf("\t文件打开失败!");
getch();
exit(1);
}
printf("请输入你要修改的职工号:");
fflush(stdin);
gets(ch);
flag=0;
while(fread(&info,sizeof(info),1,fp1)==1)
{
if(strcmp(ch,info.num)==0)
{
print1();
print2(info);
printf("\n\n请输入新的信息:\n");
printf("\t职工号:");gets(info.num);
printf("\t姓名:");gets(info.name);
printf("\t性别:"); gets(info.sex);
printf("\t问化程度:");gets(info.education);
printf("\t职务:"); gets(info.duty);
printf("\t工资:"); gets(temp); info.wage=atof(temp);
printf("\t家庭住址:"); gets(info.addr);
printf("\t联系电话:"); gets(info.phone);
flag=1;
}
fwrite(&info,sizeof(info),1,fp2);
}
fclose(fp1);
fclose(fp2);
if(flag==1)
{
printf("修改成功!\n");
remove("f:\\inform.txt"); /*删除inform文件*/
rename("f:\\temp.txt","f:\\inform.txt"); /*temp文件改名为inform*/
}
else
printf("没有记录!\n");
printf("还要继续修改吗?(Y/N):[ ]\b\b");
f=getchar(); getchar();
}while(f=='Y'||f=='y');
}
/*main函数*/
void main()
{
char mi[6];
printf("请输入密码:");
for(;;)
{
scanf("%s",&mi);
if(strcmp(mi,"muqin")==0)
while(1)
switch(menu())
{ case '1':append() ;break;
case'2':display();break;
case'3':search();break;
case'4':Delete();break;
case'5':modify();break;
case '6':printf("谢谢使用,再见!!!\n\n");exit(0);break;
}
else
printf("输入错误!!!请重新输入:");
}
}