资源描述
. .
科技大学
本科生课程设计说明书
题 目:C语言课程设计
—— 人员管理系统
学生XX:武飞
学 号:1376807331
专 业:计算机科学与技术
班 级:2021-3
指导教师:王丽颖
. .word.zl.
. .
科技大学课程设计任务书
课程名称
C语言课程设计
设计题目
人员管理系统
指导教师
王丽颖
时间
2021.12.31—2021.1.4
一、教学要求
1. 稳固和加深学生对C语言课程的根本知识的理解和掌握
2. 掌握C语言编程和程序调试的根本技能
3. 利用C语言进展根本的软件设计
4. 掌握书写程序设计说明文档的能力
5. 提高运用C语言解决实际问题的能力
二、设计资料及参数
每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。
人员管理系统
现有一批人员的数椐,要求输入计算机并存放在存中,然后增加假设干个新人员的记录,并可输出人员清单,实现文件存盘和读入文件进展修改的功能。人员的根本信息包括XX,性别,年龄,XX号和简历〔80个字符以〕。要求设计菜单来调用其各功能模块:
v 新建文件、翻开文件
v 输入记录、输出记录
v 查询记录〔至少具有两种查询方式,例如以XX查询和以XX号查询〕
v 修改、插入和删除记录
v 保存文件、退出
三、设计要求及成果
1. 分析课程设计题目的功能需求〔可选用数组或链表实现,可多人〔最多3人〕协作完成一个题目〕
2. 写出详细设计说明〔至少包括功能实现分析和模块流程图〕
3. 编写程序代码,调试程序使其能正确运行〔代码书写要规,标示符要见名知意,要有必要的注释,每人至少3个函数,每人至少200行代码,不包括注释和花括号〕
4. 设计完成的软件要便于操作和使用
5. 设计完成后提交课程设计报告〔请严格按照模板进展排版〕
四、进度安排
第一天 选择课程设计题目,分析课题的要求
第二天 编程
第三天 编程及调试
第四天 写课程设计报告
第五天 提交课程设计报告〔打印稿及电子稿〕
五、评分标准
1. 根据平时上机考勤、表现和进度,教师将每天点名和检查
2. 根据课程设计完成情况,必须有可运行的软件。
3. 根据课程设计报告的质量,如有雷同,那么所有雷同的所有人均判为不及格。
. .word.zl.
. .
目 录
科技大学课程设计任务书I
第一章需求分析3
1.1引言3
1.2任务概述3
1.3数据描述3
1.4功能需求3
第二章概要设计4
2.1总体设计4
2.2数据类型设计〔或数据构造设计〕4
2.3接口设计5
2.4运行界面设计5
第三章详细设计6
3.1输入模块设计6
3.2输出模块设计7
3.3查找模块设计7
3.4保存及读取模块设计9
第四章测试分析11
4.1测试程序执行情况11
第五章用户手册〔可选〕14
5.1使用说明14
5.2运行说明14
第六章课程设计总结15
附录:程序代码16
参考文献24
. .word.zl.
. .
第一章 需求分析
1.1 引言
随着管理人数的增加,手动管理人员将会显得不方便。这时就需要使用软件来实施人性化的管理。
1.2 任务概述
做一个程序对人员信息实现:新建文件、翻开文件、输入记录、输出记录、查询记录、
修改、插入和删除记录、保存文件、退出功能
1.3 数据描述
l 采用构造体来储存人员信息。
l 人员信息包括XX、性别、年龄、XX号、个人简历。
l XX长度输入时不能超过10。
l 性别输入时只能输入时一个字符w/m。
l XX长度输入时不能超过20 。
l 个人简历长度输入时不能超过120。
1.4 功能需求
l 新建文件、翻开文件
l 输入记录、输出记录
l 查询记录〔至少具有两种查询方式,例如以XX查询和以XX号查询〕
l 修改、插入和删除记录
l 保存文件、退出
第二章 概要设计
2.1 总体设计
1.更新人员信息
2..XX号查找
3.XX查找
4.修改信息
5.插入信息
开场
6.删除信息
7.输出信息
8.保存信息
9.读取文件
0.退出
2.2 数据类型设计〔或数据构造设计〕
typedef struct student
{
char name[M]; //XX
char sex; //性别
int year; //年龄
char num[20]; //XX号
char jian[120]; //个人简历
}stu; //构造体储存
2.3 接口设计
表2.1:函数列表
函数名
函数格式
函数功能
menu
int menu(void)
用户菜单
read
int read(stu st[])
添加人员信息
xieru
void xieru(stu st[],int n)
写信息到文件
duqu
int duqu(stu st[]);
从文件读取信息
print
void print(stu st[],int n)
输出信息到屏幕
shenfenzheng
void shenfenzheng(stu st[],int n)
按XX查找信息
xingming
void xingming(stu st[],int n)
按XX查找
xiugai
void xiugai(stu st[],int n)
修改信息
charu
int charu(stu st[],int n)
插入信息
shanchu
void shanchu(stu st[],int n)
删除信息
2.4 运行界面设计
. .word.zl.
. .
第三章 详细设计
3.1 输入模块设计
开场
int read(stu st[])
{
输出提示信息
int i=-1;
system( "cls" );
输入XX
printf("\t\t***********************************\n");
printf("\t\t* 1.更新成员信息 *\n");
printf("\t\t***********************************\n");
Y
判断XX是否小于0。
do{
i++;
printf("请输入XX:\n");
N
scanf("%s",&st[i].name);
if(atoi(st[i].name)>=0)
输入性别
{
输入年龄
printf("请输入性别(w/m):\n");
输入XX号
scanf(" %c",&st[i].sex);
输入简历
printf("请输入年龄:\n");
scanf("%d",&st[i].year);
printf("请输入XX号:\n");
scanf("%s",&st[i].num);
printf("请输入简历:\n");
完毕
scanf("%s",&st[i].jian);
printf("\n编号%d数据添加成功!\n",i+1);
printf("输入XX为负数完毕输入!\n");
printf("\n") ;
}
else break;
}while(st[i].num>0);
printf("\n--------------------------------------------------------------------\n");
printf("数据更新成功!\n");
system("pause"); //按任意键继续
return i;
}
3.2 输出模块设计
void print(stu st[],int n)
{
int i;
system( "cls" ); //清屏
printf("\n--------------------------------------------------------------------\n");
printf("编号\tXX\t性别\t年龄\tXX号\t\t简介\n");
for(i=0;i<n;i++)
{ printf("%d\t%s\t%c\t%d\t%-24s%s\n",i+1,st[i].name,st[i].sex,st[i].year,st[i].num,st[i].jian);
开场
}
}
提示信息
提示信息
3.3 查找模块设计
输入XX
输入XX
void shenfenzheng(stu st[],int n)
{
N
是否符合
char x[20];
int i;
Y
system( "cls" );
输出信息
printf("\t\t***********************************\n");
printf("\t\t* 2.XX号查找 *\n");
printf("\t\t***********************************\n");
完毕
printf("输入你要查询的XX号:");
scanf("%s",x);
for(i=0;i<n;i++)
{
if(strcmp(st[i].num,x)==0)
{
printf("XX\t性别\t年龄\tXX号\t\t简介\n");
printf("%s\t%c\t%d\t%s\t%s\n",st[i].name,st[i].sex,st[i].year,st[i].num,st[i].jian);
printf("\n--------------------------------------------------------------------\n");
system("pause");
return;
}
}
printf("未找到!");
printf("\n--------------------------------------------------------------------\n");
system("pause");
}
开场
void xingming(stu st[],int n)
{
提示信息
char x[10];
int i;
输入XX
system( "cls" );
printf("\t\t***********************************\n");
是否符合
printf("\t\t* 3.XX查找 *\n");N
printf("\t\t***********************************\n");
printf("输入你要查询的XX:");Y
输出信息
scanf("%s",x);
f or(i=0;i<n;i++)
{
if(strcmp(st[i].name,x)==0)
完毕
{
printf("XX\t性别\t年龄\tXX号\t\t简介\n");
printf("%s\t %c\t%d\t%s\t%s\n",st[i].name,st[i].sex,st[i].year,st[i].num,st[i].jian);
printf("\n--------------------------------------------------------------------\n");
printf("按键返回!");
getchar(); /*按任意健*/
getchar();
return;
}
}
printf("未找到!");
printf("\n--------------------------------------------------------------------\n");
system("pause");
}
开场
3.4 保存及读取模块设计
void xieru(stu st[],int n)
成功翻开
{
FILE *fp;
N
Y
if((fp=fopen("ren.txt","w"))==NULL)
{
保存文件
printf("保存文件失败!\n");
return;
} 关闭文件
fwrite(st,sizeof(stu),n,fp);
printf("保存成功!\n");
fclose(fp);
返回
system("pause");
}
开场
int duqu(stu st[])
{
FILE *fp;
翻开成功
int i;
if((fp=fopen("ren.txt","r"))==NULL)
N
Y
{
读取文件
printf("文件不存在!翻开失败!\n");
return 0;
关闭文件
}
for(i=0;!feof(fp);i++)
返回人数
{
fread(&st[i],sizeof(stu),1,fp);
}
fclose(fp);
返回
printf("读取成功!\n");
system("pause");
return i-1;
}
. .word.zl.
. .
第四章 测试分析
4.1 测试程序执行情况
. .word.zl.
. .
第五章 用户手册〔可选〕
5.1 使用说明
运行程序会显示菜单根据菜单输入编号实现相应功能;
1.更新人员信息
2.XX号查找
3.XX查找
4.修改信息
5.插入信息
6.删除信息
7.输出信息
8.保存文件
9.读取文件
0.退出
5.2 运行说明
只有退出程序时。保存文件。下次运行按读取。才能读取成功!
更新人员信息会覆盖到当前的人员信息。需要注意。
. .word.zl.
. .
第六章 课程设计总结
全部模块化设计。未定义全局变量做干扰。采用构造体。
缺乏之处,XX长度未做限定,有些缺乏。需要改善的有数据存储方式。改成链式存可能会更佳。还可以进一步优化程序使其实现分级菜单。实现真正意义上的新建文件,读取文件。所遇到的问题是如何给每个数据的储存文件取不同名字。如何把每个文件名读取进来。通这次的课程设计,我们对C语言这门课程有了深一步的理解。它是计算机程序设计的重要理论技术根底,在我们计算机专业的学习中占据十分重要的地位,同时也使我们知道要学习这门课程,仅学习书本上的知识是不够的,还要有较高的实践能力。因为我们学习知识就是为了实践,而只有实践多编写程序才能更好的理解与掌握书本上的东西。通过本课题,进一步熟悉了C语言的根本东西。我们还要学会分析题目的与未知,学会中合起来考虑问题,在逐步的展开思想,特别是碰到大问题时要细细的分解成为许多小的问题来解决。同时我还学到了课外的知识,碰到难题是不要逃避,而是要迎难而上,反复的实验调试结果后,再错的根底上做修改。谈到错是成功之母,说明我们在莫一件事上要屡次吸取经历教训。这次课程设计,让我对于以往上课不理解、不太清楚的问题,通过亲身实践弄懂了许多,同时因为程序是在教师及同学的帮主下完成的,当中有很多程序都是几个同学一起讨论出来的,让我体会到了集体的力量是无限的,当然更让我坚决了以后要好好掌握C语言这一门课程的决心!
. .word.zl.
. .
附录:程序代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>//字符串操作
#define N 30 //人数
#define M 10 //名字长度
typedef struct student
{
char name[M];
char sex;
int year;
char num[20];
char jian[120];
}stu;
int menu(void);//用户菜单
int read(stu st[]);//添加人员信息
void xieru(stu st[],int n);//写入信息到文件
int duqu(stu st[]);//从文件读取信息
void print(stu st[],int n);//输出信息
void shenfenzheng(stu st[],int n);//按XX查找信息
void xingming(stu st[],int n);//按XX查找
void xiugai(stu st[],int n);//修改信息
int charu(stu st[],int n);//插入信息
void shanchu(stu st[],int n);//删除信息
main()
{
int a,n;
stu ren[N];
system("color 0A");//修改颜色
while(1)
{
system( "cls" );//清屏
printf("\n");
printf("\n");
printf("\n");
printf("\t******************人员管理系统*******************\n");
printf("\t* *\n");
printf("\t* 1.更新人员信息 2.XX号查找 3.XX查找 *\n");
printf("\t* 4.修改信息 5.插入信息 6.删除信息 *\n");
printf("\t* 7.输出信息 8.保存文件 9.读取文件 *\n");
printf("\t* 0.退出 *\n");
printf("\t*************************************************\n");
a=menu();
switch(a)
{
case 1:
n=read(ren);
break;
case 2:
shenfenzheng(ren,n);
break;
case 3:
xingming(ren,n);
break;
case 4:
xiugai(ren,n);
break;
case 5:
n=charu(ren,n);
break;
case 6:
shanchu(ren,n);
n--;
break;
case 7:
print(ren,n);
printf("\n--------------------------------------------------------------------\n");
system("pause");
break;
case 8:
xieru(ren,n);
break;
case 9:
n=duqu(ren);
break;
case 0:
system( "cls" );
printf("\n\n\n");
printf("\t**************************************************\n");
printf("\t* *\n");
printf("\t* *\n");
printf("\t* 谢谢使用! *\n");
printf("\t* *\n");
printf("\t* *\n");
printf("\t**************************************************\n");
exit(0); //exit〔code〕当code为0时正常退出。非0时出现某种错误后退
default:
printf("输入错误!请输入0-9的数字!\n");
system("pause");
break;
}
}
return 0;
}
int menu(void)//用户菜单
{
int a;
printf("\n\t输入你的选择(0-9):[ ]\b\b");
scanf("%d",&a);
return a;
}
void xieru(stu st[],int n)
{
FILE *fp;
if((fp=fopen("ren.txt","w"))==NULL)
{
printf("保存文件失败!\n");
return;
}
fwrite(st,sizeof(stu),n,fp);
printf("保存成功!\n");
fclose(fp);
system("pause");
}
int duqu(stu st[])
{
FILE *fp;
int i;
if((fp=fopen("ren.txt","r"))==NULL)
{
printf("文件不存在!翻开失败!\n");
return 0;
}
for(i=0;!feof(fp);i++)
{
fread(&st[i],sizeof(stu),1,fp);
}
fclose(fp);
printf("读取成功!\n");
system("pause");
return i-1;
}
int read(stu st[])
{
int i=-1;
system( "cls" );
printf("\t\t***********************************\n");
printf("\t\t* 1.更新成员信息 *\n");
printf("\t\t***********************************\n");
do{
i++;
printf("请输入XX:\n");
scanf("%s",&st[i].name);
if(atoi(st[i].name)>=0)
{
printf("请输入性别(w/m):\n");
scanf(" %c",&st[i].sex);
printf("请输入年龄:\n");
scanf("%d",&st[i].year);
printf("请输入XX号:\n");
scanf("%s",&st[i].num);
printf("请输入简历:\n");
scanf("%s",&st[i].jian);
printf("\n编号%d数据添加成功!\n",i+1);
printf("输入XX为负数完毕输入!\n");
printf("\n") ;
}
else
break;
}while(st[i].num>0);
printf("\n--------------------------------------------------------------------\n");
printf("数据更新成功!\n");
system("pause");
return i;
}
void print(stu st[],int n)
{
int i;
system( "cls" );
printf("\n--------------------------------------------------------------------\n");
printf("编号\tXX\t性别\t年龄\tXX号\t\t简介\n");
for(i=0;i<n;i++)
{
printf("%d\t%s\t%c\t%d\t%-24s%s\n",i+1,st[i].name,st[i].sex,st[i].year,st[i].num,st[i].jian);
}
}
void shenfenzheng(stu st[],int n)
{
char x[20];
int i;
system( "cls" );
printf("\t\t***********************************\n");
printf("\t\t* 2.XX号查找 *\n");
printf("\t\t***********************************\n");
printf("输入你要查询的XX号:");
scanf("%s",x);
for(i=0;i<n;i++)
{
if(strcmp(st[i].num,x)==0)
{
printf("XX\t性别\t年龄\tXX号\t\t简介\n");
printf("%s\t%c\t%d\t%s\t%s\n",st[i].name,st[i].sex,st[i].year,st[i].num,st[i].jian);
printf("\n--------------------------------------------------------------------\n");
system("pause");
return;
}
}
printf("未找到!");
printf("\n--------------------------------------------------------------------\n");
system("pause");
}
void xingming(stu st[],int n)
{
char x[10];
int i;
system( "cls" );
printf("\t\t***********************************\n");
printf("\t\t* 3.XX查找 *\n");
printf("\t\t***********************************\n");
printf("输入你要查询的XX:");
scanf("%s",x);
for(i=0;i<n;i++)
{
if(strcmp(st[i].name,x)==0)
{
printf("XX\t性别\t年龄\tXX号\t\t简介\n");
printf("%s\t %c\t%d\t%s\t%s\n",st[i].name,st[i].sex,st[i].year,st[i].num,st[i].jian);
printf("\n--------------------------------------------------------------------\n");
system("pause");
return;
}
}
printf("未找到!");
printf("\n--------------------------------------------------------------------\n");
system("pause");
}
int charu(stu st[],int n)
{
int i=n-1;
system( "cls" );
printf("\t\t***********************************\n");
printf("\t\t* 5.插入信息 *\n");
printf("\t\t***********************************\n");
do{
i++;
printf("请输入XX:\n");
scanf("%s",&st[i].name);
if(atoi(st[i].name)>=0)
{
printf("请输入性别(w/m):\n");
s
展开阅读全文