资源描述
C语言课程设计
C语言课程设计任务书
一、题目:职员信息管理系统
二、目标和要求
目标:要求熟练掌握C语言基础知识和编辑技能;
基础掌握结构化程序设计基础思绪和方法。
要求:设计一个职员信息管理系统,使之能提供以下功效:
1、应提供一个界面来调用各个功效,调用界面和各个功效操作界面应尽可能清楚美观!
2、输入功效:职员信息录入(职员信息用文件保留),能够一次完成若干条统计输入。
3、浏览功效:完成对全部职员信息显示。
4、查找功效:①完成按职员职员号查询职员相关信息,并显示。
②完成按职员学历查询职员相关信息,并显示。
③完成按职员电话号码查询职员相关信息,并显示。
5、删除功效:经过输入职员姓名完成对该名职员信息进行删除。
6、添加功效:完成添加新职员信息任务。
7、修改功效:经过输入职员姓名完成对该名职员信息进行修改。
8、退出职员信息管理系统。
三、信息描述
职员信息包含职员号、姓名、性别、年纪、学历、工资、住址、电话等。
四、处理方案
1、首优异行需求分析,搞清楚系统功效和任务;
2、然后在总体设计中确定模块结构、划分功效模块,将软件功效需求分配给所划分最单元模块。确定模块间联络,确定数据结构、文件结构、数据库模式,确定测试方法和策略;
3、在具体设计中,为每个模块确定采取算法,选择合适工具表示算法过程(步骤图)来描述模块具体过程。确定每一模块采取数据结构和模块接口细节,包含对系统外部接口和用户界面,对系统内部其它模块接口;
4、依据分析编写C语言代码。
五、进度安排
课程设计时间为两周,分为五个阶段完成:
1、 分析设计阶段。在老师指导下自主学习和钻研问题,明确设计要求,找出现实方法。根据需求分析、总体设计、具体设计多个步骤进行。这一阶段前1-2天完成;
2、 编码调试阶段。依据设计分析方案编写C语言代码,然后调试该代码,实现课题要求功效。这一阶段在3-7天完成;
3、 总结汇报阶段。总结设计工作,写出课程设计说明书,包含需求分析、总体设计、具体设计、编码、测试步骤和内容。这一阶段在8-9天完成;
4、 考评阶段。
六、写课程设计总结
课程设计汇报要求
总结汇报包含需求分析、总体设计、具体设计、编码(具体写出编程步骤)、测试步骤和内容、课程设计总结和参考资料等。
七、参考资料
《C程序设计》(第三版) 谭浩强 著 清华大学出版社
《C程序设计题解和上机指导》(第三版 ) 谭浩强 编著 清华大学出版社
目录
1.总体设计方案 ………………………………………………………………3
2.使用说明及运行实例 ……………………………………………………5
3.项目源程序代码 ……………………………………………………………10
4.课程设计心得 ………………………………………………………………23
总体设计方案
一.系统总体步骤图
菜单
开始
依据菜单输入n值选择程序
保留
结束
是否继续进行
N
Y YY
5
添加职员信息
6
修改职员信息
2
浏览职员信息
3
查询职员信息
4
删除职员信息
7
退出
1
录入职员信息
图1.系统总体步骤图
二. 为了方便使用结构此系统结构均为全局类型定义
struct employee //定义一个职员信息结构体
{
int num;
char name[10];
char sex;
int age;
char xueli[30];
int wage;
char addr[30];
char tel[20];
}em[100];
三.各模块功效和实现
1.菜单模块:显示职员管理系统主菜单,供用户选择所需功效,经过自己定义void menu()函数来实现。
2.输入模块:输入职员工号、姓名和其它部分职员相关信息,经过自己定义void input()函数来实现。
3.保留模块:将内存中职员信息输出到磁盘文件中,能够经过自己定义void save(int)函数来实现。
4.浏览模块:浏览全部职员相关信息,经过自己定义void display()函数来实现。
5.删除模块:删除需要删除职员全部信息,经过自己定义void del()函数来实现。
6.添加模块:添加需要添加职员相关信息,经过自己定义void add()函数来实现。
7.按职员号查询模块:能够按职员号来查询职员相关信息,经过自己定义void search_num()函数来实现。
8.按职员学历查询模块:能够按职员学一向查询职员相关信息,经过自己定义void search_xuelil函数来实现。
9.按职员电话号码查询模块:能够按职员电话来查询职员相关信息,经过自己定义void search_tel函数来实现。
10.修改模块:能够修改需要修改职员相关信息,经过自己定义void modify()函数 来实现。
11.退出系统模块:退出职员信息管理系统,经过头文件windows.h中exit(0)函数来实现。
使用说明及运行实例
1.运行程序,进入职员信息管理系统主菜单:
图1:进入主菜单界面
2.输入数字“1”进行录入职员信息:
图2:录入职员信息
3.输入“y”返回主菜单(界面同图1)。
4.输入“2”浏览职员信息:
图3:浏览职员信息
5.输入“y”后继续,输入“3”进行查询职员信息:
图4:按职员号及学历查询职员信息
图5:按电话号码查询职员信息
6.进入主菜单,输入“4”进行删除职员信息:
图6:删除职员信息
7.进入主菜单输入“5”进行添加职员信息:
图7:添加职员信息
8.进入主菜单输入“6”进行修改职员信息:
图8:修改职员信息
9.进入主菜单输入”7”退出职员信息管理系统。
职员信息管理系统源程序代码
#include <stdio.h>
#include <windows.h>
#include <string.h>
#define N 100
struct employee
{
int num;
char name[20];
char sex;
int age;
char xueli[30];
int wage;
char addr[30];
char tel[20];
}em[100]; /*定义一个结构体*/
void menu();
void input();
void save(int);
void display();
void del();
void add();
void search();
void search_num();
void search_xueli();
void search_tel();
void modify(); /*定义各函数*/
void main()
{
menu();
int n,flag;
char a;
do
{
printf("请选择你需要操作步骤(1--7):\n");
scanf("%d",&n);
if(n>=1&&n<=7)
{
flag=1;
break;
}
else
{
flag=0;
printf("您输入有误,请重新选择!");
}
}
while(flag==0);
while(flag==1)
{
switch(n)
{
case 1:printf(" ◆◆◆输入职员信息◆◆◆\n");printf("\n");input();break;
case 2:printf(" ◆◆◆浏览职员信息◆◆◆\n");printf("\n");display();break;
case 3:printf(" ◆◆◆按职员号查询职员信息◆◆◆\n");printf("\n");search();break;
case 4:printf(" ◆◆◆删除职员信息◆◆◆\n");printf("\n");del();break;
case 5:printf(" ◆◆◆添加职员信息◆◆◆\n");printf("\n");add();break;
case 6:printf(" ◆◆◆修改职员信息◆◆◆\n");printf("\n");modify();break;
case 7:exit(0);break;
default :break;
}
getchar();
printf("\n");
printf("是否继续进行(y or n):\n");
scanf("%c",&a);
if(a=='y')
{
flag=1;
system("cls"); /*清屏*/
menu(); /*调用菜单函数*/
printf("请再次选择你需要操作步骤(1--7):\n");
scanf("%d",&n);
printf("\n");
}
else
exit(0);
}
}
void menu() /*菜单函数*/
{
printf(" ************欢迎进入职员信息管理系统**********\n");
printf(" 1.录入职员信息");
printf(" 2.浏览职员信息\n");
printf(" 3.查询职员信息");
printf(" 4.删除职员信息\n");
printf(" 5.添加职员信息");
printf(" 6.修改职员信息\n");
printf(" 7.退出\n");
printf(" ********************谢谢使用******************\n");
printf("\n");
printf("\n");
}
void input() /*录入函数*/
{
int i,m;
printf("请输入需要创建信息职员人数(1--100):\n");
scanf("%d",&m);
for (i=0;i<m;i++)
{
printf("请输入职员号: ");
scanf("%d",&em[i].num);
printf("请输入姓名: ");
scanf("%s",em[i].name);
getchar();
printf("请输入性别(f--女 m--男): ");
scanf("%c",&em[i].sex);
printf("请输入年纪: ");
scanf("%d",&em[i].age);
printf("请输入学历: ");
scanf("%s",em[i].xueli);
printf("请输入工资: ");
scanf("%d",&em[i].wage);
printf("请输入住址: ");
scanf("%s",em[i].addr);
printf("请输入电话: ");
scanf("%s",em[i].tel);
printf("\n");
}
printf("\n创建完成!\n");
save(m);
}
void save(int m) /*保留文件函数*/
{
int i;
FILE*fp;
if ((fp=fopen("employee_list","wb"))==NULL)
{
printf ("cannot open file\n");
exit(0);
}
for (i=0;i<m;i++) /*将内存中职员信息输出到磁盘文件中去*/
if (fwrite(&em[i],sizeof(struct employee),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
int load() /*导入函数*/
{
FILE*fp;
int i=0;
if((fp=fopen("employee_list","rb"))==NULL)
{
printf ("cannot open file\n");
exit(0);
}
else
{
do
{
fread(&em[i],sizeof(struct employee),1,fp);
i++;
}
while(feof(fp)==0);
}
fclose(fp);
return(i-1);
}
void display() /*浏览函数*/
{
int i;
int m=load();
printf(" 职员号\t姓名\t\t性别\t\t年纪 \n");
for(i=0;i<m;i++) /*m为输入部分职员人数*/
printf("\n %d\t\t%s\t%c\t\t%d\t\n",em[i].num,em[i].name,em[i].sex,em[i].age);
printf("\n 学历\t\t工资\t\t住址\t\t电话 \n");
for(i=0;i<m;i++) /*m为输入部分职员人数*/
printf("\n %s\t%d\t\t%s\t%s\n",em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
}
void del() /*删除函数*/
{
int m=load();
int i,j,n,t,flag;
char name[20];
printf("\n 原来职员信息:\n");
display();
printf("\n");
printf("请输入要删除职员姓名:\n");
scanf("%s",name);
for(flag=1,i=0;flag&&i<m;i++)
{
if(strcmp(em[i].name,name)==0)
{
printf("\n已找到此人,原始统计为:\n");
printf(" 职员号\t姓名\t\t性别\t\t年纪 \n");
printf("\n %d\t\t%s\t%c\t\t%d\t\n",em[i].num,em[i].name,em[i].sex,em[i].age);
printf("\n 学历\t\t工资\t\t住址\t\t电话 \n");
printf("\n %s\t%d\t\t%s\t%s\n",em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
printf("\n确实要删除此人信息请按1,不删除请按0\n");
scanf("%d",&n);
if(n==1)
{
for(j=i;j<m-1;j++)
{
strcpy(em[j].name,em[j+1].name);
em[j].num=em[j+1].num;
em[j].sex=em[j+1].sex;
em[j].age=em[j+1].age;
strcpy(em[j].xueli,em[j+1].xueli);
em[j].wage=em[j+1].wage;
strcpy(em[j].addr,em[j+1].addr);
strcpy(em[j].tel,em[j+1].tel);
}
flag=0;
}
}
}
if(!flag)
m=m-1;
else
printf("\n对不起,查无此人!\n");
printf("\n 浏览删除后全部职员信息:\n");
save(m); /*调用保留函数*/
display(); /*调用浏览函数*/
printf("\n继续删除请按1,不再删除请按0\n");
scanf("%d",&t);
switch(t)
{
case 1:del();break;
case 0:break;
default :break;
}
}
void add()/*添加函数*/
{
FILE*fp;
int n;
int count=0;
int i;
int m=load();
printf("\n 原来职员信息:\n");
display();
printf("\n");
fp=fopen("emploee_list","a");
printf("请输入想增加职员数:\n");
scanf("%d",&n);
for (i=m;i<(m+n);i++)
{
printf("\n 请输入新增加职员信息:\n");
printf("请输入职员号: ");
scanf("%d",&em[i].num);
printf("\n");
printf("请输入姓名: ");
scanf("%s",em[i].name);
getchar();
printf("请输入性别(f--女 m--男): ");
scanf("%c",&em[i].sex);
printf("请输入年纪: ");
scanf("%d",&em[i].age);
printf("请输入学历: ");
scanf("%s",em[i].xueli);
printf("请输入工资: ");
scanf("%d",&em[i].wage);
printf("请输入住址: ");
scanf("%s",em[i].addr);
printf("请输入电话: ");
scanf("%s",em[i].tel);
printf("\n");
count=count+1;
printf("已增加人数:\n");
printf("%d\n",count);
}
printf("\n添加完成!\n");
m=m+count;
printf("\n浏览增加后全部职员信息:\n");
printf("\n");
save(m);
display();
fclose(fp);
}
void search()/*查询函数*/
{
int t,flag;
do
{
printf("\n按职员号查询请按1; 按学历查询请按2; 按电话号码查询请按3; 进入主函数请按4\n");
scanf("%d",&t);
if(t>=1&&t<=4)
{
flag=1;
break;
}
else
{
flag=0;
printf("您输入有误,请重新选择!");
}
}
while(flag==0);
while(flag==1)
{
switch(t)
{
case 1:printf("按职员号查询\n");search_num();break;
case 2:printf("按学历查询\n");search_xueli();break;
case 3:printf("按电话号码查询\n");search_tel();break;
case 4:main();break;
default:break;
}
}
}
void search_num()
{
int num;
int i,t;
int m=load();
printf("请输入要查找职员号:\n");
scanf("%d",&num);
for(i=0;i<m;i++)
if(num==em[i].num)
{
printf("\n已找到此人,其统计为:\n");
printf(" 职员号\t姓名\t\t性别\t\t年纪 \n");
printf("\n %d\t\t%s\t%c\t\t%d\t\n",em[i].num,em[i].name,em[i].sex,em[i].age);
printf("\n 学历\t\t工资\t\t住址\t\t电话 \n");
printf("\n %s\t%d\t\t%s\t%s\n",em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
break;
}
if(i==m)
printf("\n对不起,查无此人\n");
printf("\n");
printf("返回查询函数请按1,继续查询职员号请按2\n");
scanf("%d",&t);
switch(t)
{
case 1:search();break;
case 2: break;
default:break;
}
}
void search_xueli()
{
char xueli[30];
int i,t;
int m=load();
printf("请输入要查找学历:\n");
scanf("%s",xueli);
for(i=0;i<m;i++)
if(strcmp(em[i].xueli,xueli)==0)
{
printf("\n已找到,其统计为:\n");
printf(" 职员号\t姓名\t\t性别\t\t年纪 \n");
printf("\n %d\t\t%s\t%c\t\t%d\t\n",em[i].num,em[i].name,em[i].sex,em[i].age);
printf("\n 学历\t\t工资\t\t住址\t\t电话 \n");
printf("\n %s\t%d\t\t%s\t%s\n",em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
}
if(i==m)
printf("\n对不起,查无此人\n");
printf("\n");
printf("返回查询函数请按1,继续查询学历请按2\n");
scanf("%d",&t);
switch(t)
{
case 1:search();break;
case 2:break;
default :break;
}
}
void search_tel()
{
char tel[20];
int i, t;
int m=load();
printf("请输入要查找电话号码:\n");
scanf("%s",tel);
for(i=0;i<m;i++)
if(strcmp(tel,em[i].tel)==0)
{
printf("\n已找到此人,其统计为:\n");
printf(" 职员号\t姓名\t\t性别\t\t年纪 \n");
printf("\n %d\t\t%s\t%c\t\t%d\t\n",em[i].num,em[i].name,em[i].sex,em[i].age);
printf("\n 学历\t\t工资\t\t住址\t\t电话 \n");
printf("\n %s\t%d\t\t%s\t%s\n",em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
break;
}
if(i==m)
printf("\n对不起,查无此人\n");
printf("\n");
printf("返回查询函数请按1,继续查询电话号码请按2\n");
scanf("%d",&t);
switch(t)
{
case 1:search();break;
case 2:break;
default :break;
}
}
void modify() /*修改函数*/
{
int num;
char name[20];
char sex;
int age;
char xueli[30];
int wage;
char addr[30];
char tel[20];
int b,c,i,n,t,flag;
int m=load();
printf("\n 原来职员信息:\n");
display();
printf("\n");
printf("请输入要修改职员姓名:\n");
scanf("%s",name);
for(flag=1,i=0;flag&&i<m;i++)
{
if(strcmp(em[i].name,name)==0)
{
printf("\n已找到此人,原始统计为:\n");
printf(" 职员号\t姓名\t\t性别\t\t年纪 \n");
printf("\n %d\t\t%s\t%c\t\t%d\t\n",em[i].num,em[i].name,em[i].sex,em[i].age);
printf("\n 学历\t\t工资\t\t住址\t\t电话 \n");
printf("\n %s\t%d\t\t%s\t%s\n",em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
printf("\n确实要修改此人信息请按1 ; 不修改请按0\n");
scanf("%d",&n);
if(n==1)
{
printf("\n需要进行修改选项\n 1.职员号 2.姓名 3.性别 4.年纪 5.学历 6.工资 7.住址 8.电话\n");
printf("请输入你想修改那一项序号:\n");
scanf("%d",&c);
if(c>8||c<1)
printf("\n选择错误,请重新选择!\n");
}
flag=0;
}
}
if(flag==1)
printf("\n对不起,查无此人!\n");
do
{
switch(c) /*因为当找到第i个职员时,for语句后i自加了1,所以下面应该把改后信息赋值给第i-1个人*/
{
case 1:printf("职员号改为: ");
scanf("%d",&num);
em[i-1].num=num;
break;
case 2:printf("姓名改为: ");
scanf("%s",name);
strcpy(em[i-1].name,name);
break;
case 3:printf("性别改为: ");
getchar();
scanf("%c",&sex);
em[i-1].sex=sex;
break;
case 4:printf("年纪改为: ");
scanf("%d",&age);
em[i-1].age=age;
break;
case 5:printf("学历改为: ");
scanf("%s",xueli);
strcpy(em[i-1].xueli,xueli);
break;
case 6:printf("工资改为: ");
scanf("%d",wage);
break;
case 7:printf("住址改为: ");
scanf("%s",addr);
strcpy(em[i-1].addr,addr);
break;
case 8:printf("电话改为: ");
scanf("%s",tel);
strcpy(em[i-1].tel,tel);
break;
}
printf("\n");
printf("\n是否确定所修改信息?\n 是 请按1 ; 不,重新修改 请按2: \n");
scanf("%d",&b);
}
while(b==2);
printf("\n浏览修改后全部职员信息:\n");
printf("\n");
save(m);
display();
printf("\n继续修改请按1,不再修改请按0\n");
scanf("%d",&t);
switch(t)
{
case 1:modify();break;
case 0:break;
default :break;
}
}
C语言课程设计心得
经过这次课程设计,增加了我们对软件技术了解,即使还不明确软件技术包含具体内容,但从学习C语言这门课程开始,已发觉程序设计好处,它对我们数学学习也有很大帮助。在学习C语言过程中也学到和巩固了很多计算机应用基础知识,对计算机机体也有了一个较为具体了解。在具体操作中对这学期所学C语言理论知识得到巩固加强,达成实训目标,也发觉自己不足之处,为我们以后c语言学习奠定了基础,同时体会到C语言含有语句简练,使用灵活,实施效率高等特点。发觉上机操作关键作用,尤其是对数组和循环有了深刻了解。经过实际操作,学会 C语言程序编程基础步骤、基础方法,开发了自己逻辑思维能力,培养了分析问题、处理问题能力。
因为本课题中很多知识点全部没有学过全部要靠自己到课外资料中去查找。在用时候难免出现这么那样错误。如开始设计出来菜单不是预想那样,而是总个窗中出现混乱。处理这个问题措施是调整。一个系统菜单和提醒信息很关键。假如没有这些用户根本不知道怎么用你设计这个系统。在设计调试过程中也无法顺利完成调试工作。有了一个清楚简单菜单和部分提醒信息这后,调试过程完成很顺利。
回顾起此次课程设计,至今我们仍感慨颇多,确实,从拿到题目到完成整个编程,从理论到实践,在这些日子里,能够学到很多很多东西,同时不仅能够巩固了以前所学过知识,而且学到了很多在书本上所没有学到过知识。经过这次课程设计使我们知道了理论和实际相结合是很关键,只有理论知识是远远不够,只有把所学理论知识和实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提升自己实际动手能力和独立思索能力。在设计过程中碰到问题,能够说得是困难重重,这毕竟第一次做,难免会碰到过多种多样问题,同时在设计过程中发觉了自己不足之处,对以前所学过知识了解得不够深刻,掌握得不够牢靠,比如说结构体……经过这次课程设计以后,一定把以前所学过知识此次课程设计结束了,对于我们影响很大。我们经过这次实践学到了很多知识。学到了设计一个简单系统。要注意哪些方面。也使我们知道自己哪些方面做得还不够。
但我们总结出了一点点经验以下:
①要对系统功效和要求做出具体分析,并合理分解任务。
②把分解出来子任务,做给一个相对独立模块。
③在设计一个模块之前,要简单构想一下总界面显视情况。
④针对构想出来界面进行程序编写。
展开阅读全文