C语言课程设计实验报告.docx

上传人:b****8 文档编号:10909290 上传时间:2023-02-23 格式:DOCX 页数:43 大小:942.97KB
下载 相关 举报
C语言课程设计实验报告.docx_第1页
第1页 / 共43页
C语言课程设计实验报告.docx_第2页
第2页 / 共43页
C语言课程设计实验报告.docx_第3页
第3页 / 共43页
C语言课程设计实验报告.docx_第4页
第4页 / 共43页
C语言课程设计实验报告.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

C语言课程设计实验报告.docx

《C语言课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《C语言课程设计实验报告.docx(43页珍藏版)》请在冰豆网上搜索。

C语言课程设计实验报告.docx

C语言课程设计实验报告

课程设计

课程名称程序设计课程设计

设计题目高校在职职工管理软件

班级及班级代码

专业

指导教师:

学号:

姓名:

提交日期:

 

 

姓名课程设计成绩

评语:

评价内容

不及格

及格

表达精练,格式准确,基本无错别字

内容完整,思路清晰,结构严谨,设计科学,可操作性强

程序能完成课程设计任务书所规定的任务,功能完善,

独立分析和解决问题能力较好。

代码简洁,算法清晰,可读性强

无抄袭现象且课程设计报告体会深刻

 

指导教师(签名)

年月日

 

1系统功能要求(需求分析):

采用结构体数组或文件形式存储职工的信息,每个职工应包含如下几方面的信息:

职工号、姓名、性别、所属二级单位、所学专业、职称、月工资,电话号码。

软件由主函数(含欢迎界面)和下列6个功能模块组成:

(1)减少一个职工(需指定要删除职工的职工号);

(2)增加一个职工号(需输入要增加职工号的所有信息);(3)查找一个职工号的信息(需指定职工号或电话号码);(4)统计指定二级单位的职工人数、工资总额;(5)按职工的工资多少对职工排序(6)退出程序的运行。

(正文宋体4号,行距固定为20英镑)

2系统总体(概要)设计思想

(1)开发及设计的总体思想

高校在职职工管理软件设计算法说明:

STEP1预处理,定义结构体

STEP2进入欢迎界面

STEP3选择某一种功能

STEP4根据提示输入一个字母

STEP5对于输入的字母编辑关于删除、增加、排序、查找、统计功能的函数

STEP6如果输入的字母表示退出,退出系统

(2)

系体模块结构图

 

(3)系统文件及函数组成、功能(参考P154的表12-1)

源文件

函数名及其成分

功能

workers.c

main

总控函数

库函数及函数原型声明

引用库函数及函数

常数

提供常数

add_disp.c

showTable

输出表头

display

显示所有职工信息函数

addRecord

在当前表的末尾增加新的信息

handle_menu.c

handle_menu

菜单处理函数

menu_select.c

menu_select

菜单选择函数

quit

结束运行,退出

que_remv.c

findRecord

查找指定记录函数

showTable

打印查询到的职工信息

removeRecord

删除记录函数

copyRecord

将src指向的一条记录复制给dest指向的记录

save_load.c

saveRecords

文件存储操作函数

loadRecords

文件读取操作函数

sort_tongji.c

Tongji

统计职工资料

showTable

打印统计二级单位的职工人数和工资总额

sortInfo

职工信息排序函数

workers.h

常数

提供常数

结构声明

职工信息结构

库函数及函数原型声明

引用库函数及函数

3系统详细设计

(1)函数的描述

a.本程序总共有8个文件:

workers.h

workers.c

add_disp.c

sav_load.c

que_remv.c

sort_tongji.c

handle_menu.c

menu_select.c

b.所涉及到的函数如下:

(1).菜单处理函数

函数原型:

voidhandle_menu(void);//菜单处理

功能:

处理选择的菜单命令

参数:

void

返回值:

void

工作方式:

根据命令,调用相应函数

要求:

给出结束信息

(2).菜单选择函数

函数原型:

intmenu_select(void);//菜单选择

功能:

接受用户选择的命令代码

参数:

void

返回值:

int

工作方式:

返回命令代码的整数值

要求:

只允许选择规定键,如果输入不合要求,则提醒用户重新输入

(3).删除记录函数

函数原型:

voidremoveRecord(void);//删除指定的记录

功能:

删除内存数组内存数组中的指定记录

参数:

void

返回值:

void

工作方式:

根据给定的关键字,查找符合的记录并删除之。

要求:

将后面的记录前移,同时改变名次并给出相关信息

(4).增加信息函数

函数原型:

voidaddRecord(void);//在表尾追加职工信息

功能:

增加记录

参数:

void

返回值:

void

工作方式:

从尾部开始逐个追加记录

要求:

将新的记录追加在记录尾部,并对记录进行计数

(5).显示所有学生信息函数

函数原型:

voiddisplay(void);//显示信息

功能:

显示内存里的记录信息

参数:

void

返回值:

void

工作方式:

从头部开始逐个显示记录内容

要求:

报告是否有记录及记录条数和内容

(6).查询指定职工信息函数

函数原型:

voidqueryInfo(void);//查询指定的职工信息

功能:

将一个文件的内容追加到另一个文件的尾部

参数:

void

返回值:

void

工作方式:

可以按照职工号或电话号码来查询

要求:

打印查询到的学生的信息或给出相关信息。

(7).对职工信息进行排序

函数原型:

voidsort(void);//对职工进行排序

功能:

对职工信息进行排序

参数:

void

返回值:

void

工作方式:

按职工工资多少对职工进行排序

要求:

打印排序结果

(8).统计二级单位人数和工资总额

函数原型:

voidtongji(void);//统计函数

功能:

统计二级单位人数和工资总额

参数:

void

返回值:

void

工作方式:

指定二级单位,然后再进行统计

要求:

统计后打印

(9).文件存储操作函数

函数原型:

intsaveRecords(void);//文件存储

功能:

将记录存入默认文件wor_info或者指定文件

参数:

void

返回值:

成功0,失败-1

工作方式:

数组records被保存至指定文件

要求:

报告是否有记录可存,是否能正常建立或打开文件,根据要求执行存入操作并报告存入记录的条数

(10).文件读取操作函数

函数原型:

intloadRecords(void);//文件读取

功能:

默认文件wor_info或者指定文件的记录取入内存

参数:

void

返回值:

成功0,失败-1

工作方式:

records为从指定文件中读取出的记录

要求:

报告是否有记录可存,是否能够正常打开文件,是否覆盖已有记录以及读取记录的条数

(11).结束程序运行函数

函数原型:

voidquit(void);//结束运行

功能:

结束程序运行

参数:

void

返回值:

void

工作方式:

根据要求决定在退出前是否将修改的记录存入文件

要求:

结束运行之前,询问是否对修改的记录进行存储

(12).输出表头函数

函数原型:

voidshowTable(void);//输出表头

功能:

输出表头信息

参数:

void

返回值:

void

工作方式:

输出一行表头信息

要求:

输出一行表头信息

(13).查找指定记录函数原型

函数原型:

intfindRecord(char*target,inttargetType,intfrom);

功能:

查找指定的记录

参数:

char*target欲查找记录的某一项及target相同;

inttargetType通过什么来查找;

intfrom从第from个记录开始查找

返回值:

int(找到的记录的序号),若找不到则返回-1

工作方式:

根据给定的关键字,查找符合记录的序号

要求:

找不到则返回-1

(2)主要函数流程图(2个以上,可参考材P148的写法)

 

addRecordquit

 

(3)编码(附后)

4系统测试

内容包括:

程序调试情况(8幅以上测试结果截图);

5、总结:

本人C语言程序设计基础较差,因此,在写这个程序的时候遇到了诸多困难,多亏同学的帮忙我的程序才可以成功地运行,真的是自己之前不够刻苦,用功,写代码这种东西还是要多练,多做题才能有收获,在写那个登陆账号和密码的函数的时候,我调试了好久都没发现错误,最后。

在同学的帮助下,成功发现是数组那里除了问题,居然少打了个中括号。

所以本人数组和指针方面的知识点欠缺,还需要多多练习。

虽然这份程序是参考学生成绩那份来找灵感的,还是出现了好多错误,最大的收货就是看到程序成功运行的那一刻。

6结束语

感谢李惠坤同学和林柔佳同学热心帮助。

参考文献

[1]谭浩强,C程序设计(第二版),北京:

清华大学出版社,2001.1(左对齐,宋体,五号)

[2]陈朔鹰,C语言程序设计习题集,北京:

人民邮电出版社,2003.6

7附录(代码)

#include

#include

//#include

#include//conio是ConsoleInput/Output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作,比如getch()函数等等。

#include

#defineINITIAL_SIZE100//数组初始大小

#defineINCR_SIZE50//数组每次增加的大小

structworkers_info

{//每个职工包含的信息

charnum[10];//职工号

charname[10];//姓名

charsex[3];//性别

charpost[10];//所属二级单位

charmajor[10];//所学专业

charjobname[10];//职称

floatsalary;//月工资

charphonenum[11];//电话号码

}wk[10];

typedefstructworkers_infoWrkInfo;

externintnumWrks;//记录职工数

externWrkInfo*records;//记录职工信息的数组

externcharsavedTag;//信息是否已保存的标志,0为已保存,1为未保存

externintarraySize;//数组大小

voidhandle_menu(void);//菜单处理

intmenu_select(void);//菜单选择

voidremoveRecord(void);//删除指定的记录

voidaddRecord(void);//在表尾追加职工信息

voiddisplay(void);//显示信息

voidqueryInfo(void);//查询指定的职工信息

voidsortInfo(void);//对职工进行排序

voidTongji(void);//统计函数

intsaveRecords(void);//文件存储

intloadRecords(void);//文件读取

voidquit(void);//结束运行

voidshowTable(void);//输出表头

intfindRecord(char*target,inttargetType,intfrom);//char*target欲查找记录的某一项及target相同;inttargetType通过什么来查找;intfrom从第from个记录开始查找

#include"workers.h"

/*************************

*初始化

*************************/

intnumWrks=0;//记录的职工数

WrkInfo*records=NULL;//记录职工信息的数据

charsavedTag=0;//信息是否已保存的标志,1为未保存,0为保存

intarraySize;//数组大小

/*********************

*主函数

********************/

voidmain()

{

//初始化数组

chara[20]="14251102104",b[20]="0808",str[20];

records=(WrkInfo*)malloc(sizeof(WrkInfo)*INITIAL_SIZE);

system("color5A");

if(records==NULL)

{

printf("memoryfail!

");

exit(-1);

}

arraySize=INITIAL_SIZE;//

printf("\n");

printf("\t**********************************\n");

printf("\t*这是一个*\n");

printf("\t*高校在职职工简单管理程序*\n");

printf("\t*可以对职工信息进行管理*\n");

printf("\t*欢迎使用管理程序*\n");

printf("\t**********************************\n");

printf("\n");

printf("\n");

printf("请输入用户名<14251102104>和密码<0808>");

while

(1){

scanf("%s",str);

if(!

strcmp(str,a)){

scanf("%s",str);

if(!

strcmp(str,b)){

printf("登陆成功");

handle_menu();

}

elseprintf("登陆失败");

}

}

}

voidcopyRecord(WrkInfo*src,WrkInfo*dest);

/*********************

*菜单处理函数

********************/

#include"workers.h"

voidhandle_menu(void)

{

for(;;){

switch(menu_select())

{

case1:

removeRecord();

break;

case2:

addRecord();

break;

case3:

queryInfo();

break;

case4:

Tongji();

break;

case5:

sortInfo();

break;

case6:

display();

break;

case7:

saveRecords();

break;

case8:

loadRecords();

break;

case9:

quit();

}

}

}

#include"workers.h"

/*********************

*菜单选择函数menu_select

********************/

intmenu_select()

{

chars[2];

intcn=0;

printf("\n");

printf("\t1.删除职工信息\n");

printf("\t2.增加职工信息\n");

printf("\t3.查询职工信息\n");

printf("\t4.统计职工信息\n");

printf("\t5.对职工信息进行排序\n");

printf("\t6.显示职工信息\n");

printf("\t7.保存学生信息至记录文件\n");

printf("\t8.从记录文件读取学生信息\n");

printf("\t9.结束运行\n");

printf("\n\t左边数字对应功能选择,请选1-9:

\n\n");

for(;;)

{

gets(s);

cn=atoi(s);

if(cn<1||cn>9)printf("\n\t输入错误,重选1-9:

\n\n");

elsebreak;

}

returncn;

}

/*********************

*结束运行,退出

*参数void

********************/

voidquit(void)

{

charstr[5];

if(savedTag==1)

{

printf("是否保存原来的记录?

(Y/n)");

gets(str);

if(str[0]!

='n'&&str[0]!

='N')

saveRecords();

}

free(records);

exit(0);

}

#include"workers.h"

/*********************

*输出表头

********************/

voidshowTable(void)

{

printf("职工号\t姓名\t性别\t所属二级单位\t所学专业\t职称\t月工资\t电话号码\n");

}

/*********************

*显示所有职工信息函数

********************/

voiddisplay(void)

{

inti;

if(numWrks==0)

{

printf("没有可供显示的记录!

");

return;

}

showTable();

for(i=0;i

{

//打印职工信息

printf("%s\t%s\t%s\t%s\t",records[i].num,records[i].name,records[i].sex,records[i].post,records[i].major);

printf("%s\t%s\t%f\t%s\t",records[i].jobname,records[i].salary,records[i].phonenum);

//打印满10个记录后停下来

if(i%9==0&&i!

=0)

{

printf("输入任一字符后继续...\n");

getch();

printf("\n\n");

showTable();

}

}

}

/****************************************

*在当前表的末尾增加新的信息结果:

*records中将记录的信息,如果数组

*大小不够,会重新申请数组空间

****************************************/

voidaddRecord(void)

{

//records=realloc(records,(arraySize+INCR_SIZE)*sizeof(WrkInfo));

charstr[10];

intj;

floatmark,sum;

if(numWrks==0)

printf("原来没有记录,现在建立新表\n");

else

printf("下面在当前表的末尾增加新的信息\n");

while

(1)//()中为1表示无条件反复循环

{

printf("您将要添加一组信息,确定吗?

(Y/n)");

gets(str);

if(str[0]=='n'||str[0]=='N')//不再添加新的信息

break;

if(numWrks>=arraySize)//现在的数组空间不足,需要重新申请空间

{

records=realloc(records,(arraySize+INCR_SIZE)*sizeof(WrkInfo));//新空间大小变为(arraySize+INCR_SIZE)记录大小,即在原来基础上增加INCR_SIZE个记录大小

if(records==NULL)

{

printf("memoryfailed!

");

exit(-1);

}

arraySize=arraySize+INCR_SIZE;//arraySize修改为新空间可保存的记录数

}

 

printf("请输入职工号:

");

gets(records[numWrks].num);

printf("请输入姓名:

");

gets(records[numWrks].name);

printf("请输入性别(0为女,1为男):

");

gets(str);

if(str[0]=='0')

strcpy(records[numWrks].sex,"女");

else

strcpy(records[numWrks].sex,"男");

printf("请输入所属二级单位:

");

gets(records[numWrks].post);

printf("请输入所学专业:

");

gets(records[numWrks].major);

printf("请输入职称:

");

gets(records[numWrks].jobname);

printf("请输入月工资:

");

gets(str);

records[numWrks].salary=(float)atof(str);

printf("请输入电话号码:

");

gets(records[numWrks].phonenum);

numWrks++;

}

printf("现在一共有%d条信息\n",numWrks);

savedTag=1;

}#include"workers.h"

/*********************************************

*查找指定记录函数

*参数:

target:

欲查找记录的某一项及target相同

*targetType:

表明通过那一项来查找,0为学号,1为姓名,2为名次

*from:

从第from个记录开始找

*返回:

找到的记录的序号,若找不到则返回-1

*********************************************/

intfindRecord(char*target,inttargetType,intfrom)

{

inti;

for(i=from;i<=numWrks;i++)

{

if((targetType==0&&strcmp(target,records[i].num)==0)||(targetType==1&&strcmp(target,records[i].name)==0)||(targetType==2&&strcmp(target,records[i].post)==0))

returni;

}

return-1;

}

voidqueryInfo(void)

{

charstr[5];

chartarget[20];

inttype;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 经济学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1