c语言程序报告.docx
- 文档编号:16663125
- 上传时间:2023-07-16
- 格式:DOCX
- 页数:26
- 大小:206.04KB
c语言程序报告.docx
《c语言程序报告.docx》由会员分享,可在线阅读,更多相关《c语言程序报告.docx(26页珍藏版)》请在冰点文库上搜索。
c语言程序报告
序号:
学号:
10446220
课程设计
设计课程名称:
C语言程序设计
题目:
计算机系职工信息管理系统
学生姓名:
孙伟
学院(系):
信息科学与工程学院专业班级:
电子102
指导教师:
程起才专业技术职务:
讲师
设计时间:
2011年6月10日2011年6月30日
1系统的意义及其功能2
2系统的功能结构图以及调用关系3
3系统功能详细分析3
3.1职工信息的添加4
3.2职工信息的删除4
3.3职工信息的查询5
3.4职工信息的排序5
3.5职工信息的显示6
4运行界面6
4.1程序主菜单6
4.2输入职工信息7
4.3添加职工信息7
4.4删除职工信息7
4.5查找职工信息7
4.6职工信息排序8
4.7职工信息的显示9
4.8职工信息的保存9
5系统使用说明9
6C语言源程序代码9
7心得体会18
8实习日志18
9参考文献19
1系统的意义及其功能
本系统为计算机系职工信息管理系统,题目描述:
假设某校计算机职工基本信息主要包括:
职工信息包括职工号、姓名、年龄、学历、工资、住址、电话(职工号不重复),本系统应能对这些基本信息进行管理,并要求具有以下功能;
1、具有职工信息添加功能;2、具有职工信息删除功能;
3、具有职工信息查询功能;4、具有职工信息排序功能;
5、具有职工信息显示功能;
2系统的功能结构图以及调用关系
3系统功能详细分析
本系统的主要功能包括职工信息的添加,删除,查询,排序和显示功能以及退出程序。
1职工信息的添加
2职工信息的删除
.
3职工信息的查询
4职工信息的排序
5职工信息的显示
4运行界面
1程序主菜单
2输入职工信息
3添加职工信息
4删除职工信息
4查找职工信息
1按职工号查找
2按姓名查找
3按学历查找
5职工信息排序
6职工信息的显示
7职工信息的保存
5系统使用说明
当进入程序后,先显示主菜单,菜单中有以下操作:
1职工信息的输入;
2职工信息的添加;
3职工信息的删除;
4职工信息的查询;
5职工信息的排序;
6职工信息的显示;
7职工信息的保存;
8退出系统。
注:
1当输入职工信息时注意屏幕上的提示!
!
6C语言源程序代码
#include
#include
#include
#include
#include
#defineLENsizeof(structstudent)
structstudent*create();
structstudent*insert(structstudent*);
structstudent*del(structstudent*);
voidfind(structstudent*);
voidsort(structstudent*);
structstudent*data(structstudent*);
structstudent*save(structstudent*);
structstudent
{
intnum;
charname[15];
charsex[10];
intage;
charxueli[10];
floatwage;
charadd[30];
chartel[20];
structstudent*next;
}*head=NULL;
intn;
voidmain()
{
charc;
structstudent*head;
do
{
system("cls");
printf("****************************************\n");
printf("1:
输入职工信息\n");
printf("2:
添加一个职工信息\n");
printf("3:
删除一个职工信息\n");
printf("4:
查找一个职工信息\n");
printf("5:
职工信息排序\n");
printf("6:
职工信息显示\n");
printf("7:
职工信息保存\n");
printf("8:
退出\n");
printf("*****************************************\n");
printf("请选择输入选项[1\\2\\3\\4\\5\\6\\7\\8]:
>");
do
{
c=getchar();
}while(c!
='1'&&c!
='2'&&c!
='3'&&c!
='4'&&c!
='5'&&c!
='6'&&c!
='7'&&c!
='8');
getchar();
switch(c)
{
case'1':
head=create(head);break;
case'2':
head=insert(head);break;
case'3':
head=del(head);break;
case'4':
find(head);break;
case'5':
sort(head);break;
case'6':
data(head);break;
case'7':
save(head);break;
case'8':
exit(0);break;
}
printf("按任意键返回主菜单:
\n");
flushall();
getchar();
system("cls");
}while
(1);
}
structstudent*create()//创建链表
{
structstudent*p1,*p2;
n=0;//表示结点个数
head=NULL;//head表示链表的头,初值为NULL
p1=p2=(structstudent*)malloc(LEN);//动态申请一个新结点
printf("输入每个项目后请仅以一个空格结尾,最终以职工号0录入!
\n");
printf("请输入\n职工号\t姓名性别年龄学历工资地址电话\n");
scanf("%d%s%s%d%s%f%s%s",
&p1->num,p1->name,p1->sex,&p1->age,p1->xueli,&p1->wage,p1->add,p1->tel);//将输入的数据放入新结点的数据域中
while(p1->num!
=0)
{
n=n+1;//结点个数加1
if(n==1)head=p1;//令head指向链表的第一个结点
elsep2->next=p1;//将原链表中最后一个结点与新建立的结点联系起来
p2=p1;
p1=(structstudent*)malloc(LEN);//重新动态申请一个新结点
scanf("%d%s%s%d%s%f%s%s",
&p1->num,p1->name,p1->sex,&p1->age,p1->xueli,&p1->wage,p1->add,p1->tel);
}
p2->next=NULL;//令链表的指针域为NULL
free(p1);//释放p1指向的结点内存
return(head);
}
structstudent*insert(structstudent*head)//函数insert功能:
在结尾在结尾追加职工资料
{
structstudent*p1,*p2;
intn=0;
p2=p1=(structstudent*)malloc(LEN);//开辟一个新单元
p1=head;
printf("\n");
printf("此函数仅执行添加功能,请确定已有职工信息!
\n");
printf("\n");
printf("输入要增加的职工的资料!
(每项后请仅以一个空格结尾!
)\n");
printf("---------------------------------------------------\n");
printf("职工号姓名性别年龄学历工资住址电话\n");
scanf("%d%s%s%d%s%f%s%s",&p2->num,p2->name,p2->sex,&p2->age,p2->xueli,&p2->wage,p2->add,p2->tel);
getchar();
if(head==NULL)
{
head=p2;
p2->next=NULL;
}//当原来链表为空时,新节点作为头结点
else
{
while(p1->next!
=NULL)
p1=p1->next;
if(p1->next==NULL)
p1->next=p2;
p2->next=NULL;
}
printf("添加完毕。
\n");
sort(head);
return(head);
}
structstudent*del(structstudent*head)//函数del功能:
删除职工资料
{
structstudent*p1,*p2;
chara[15];
intk;
printf("请输入要删除职工姓名:
>\n");
scanf("%s",a);
if(head==NULL)
{
printf("\n不存在任何职工信息!
\n");
gotoend;
}
p1=head;
k=strcmp(p1->name,a);
while(k!
=0&&p1->next!
=NULL)
{
p2=p1;
p1=p1->next;
k=strcmp(p2->name,a);
}//查找要删除的结点
if(k==0)//找到要删除的节点
{
if(p1==head)//要删除的结点是头结点
head=p1->next;//将第二个结点的地址赋给head
else
p2->next=p1->next;//将要删除的结点的前一个结点和后一个结点连接起来
}
printf("该职工信息已经删除!
\n");
end:
return(head);
}
structstudent*find(structstudent*head)
{
charc,a[15],b[15];
intn,k,l;
structstudent*p1;
printf("******************************************\n");
printf("1:
按职工号查找\n");
printf("2:
按姓名查找\n");
printf("3:
按学历查找\n");
printf("4:
返回主菜单\n");
printf("******************************************\n");
printf("\n");
printf("请选择输入选项[1\\2\\3\\4]:
>");
do
{
c=getchar();
}while(c!
='1'&&c!
='2'&&c!
='3'&&c!
='4');
getchar();
switch(c)
{
case'1':
{
printf("请输入要查询职工的职工号>");
scanf("%d",&n);
if(head==NULL)
{
printf("\n不存在任何职工信息!
\n");
exit(0);
}
p1=head;
while(p1!
=NULL)
{
if(p1->num==n)//找到该节点并输出数据域
{
printf("************************************\n");
printf("职工号:
%d",p1->num);
printf("姓名:
%s",p1->name);
printf("性别:
%s",p1->sex);
printf("年龄:
%d",p1->age);
printf("学历:
%s",p1->xueli);
printf("工资:
%f",p1->wage);
printf("住址:
%s",p1->add);
printf("电话:
%s",p1->tel);
p1=p1->next;
}
else
p1=p1->next;//结点后移
}
return(head);
};break;
case'2':
{
printf("请输入要查询职工的姓名>");
scanf("%s",a);
if(head==NULL)
{
printf("\n不存在任何职工信息!
\n");
exit(0);
}
p1=head;
k=strcmp(p1->name,a);
while(p1!
=NULL)
{
if(k==0)//找到该节点并输出数据域
{
printf("**********************************\n");
printf("职工号:
%d",p1->num);
printf("姓名:
%s",p1->name);
printf("性别:
%s",p1->sex);
printf("年龄:
%d",p1->age);
printf("学历:
%s",p1->xueli);
printf("工资:
%f",p1->wage);
printf("住址:
%s",p1->add);
printf("电话:
%s",p1->tel);
p1=p1->next;
k=strcmp(p1->name,b);
}
else
p1=p1->next;//结点后移
}
return(head);
}break;
case'3':
{
printf("请输入要查询职工的学历>");
scanf("%s",b);
if(head==NULL)
{
printf("\n不存在任何职工信息!
\n");
exit(0);
}
p1=head;
l=strcmp(p1->name,b);
while(p1!
=NULL)
{
if(l==0)//找到该节点并输出数据域
{
printf("********************************\n");
printf("职工号:
%d",p1->num);
printf("姓名:
%s",p1->name);
printf("性别:
%s",p1->sex);
printf("年龄:
%d",p1->age);
printf("学历:
%s",p1->xueli);
printf("工资:
%f",p1->wage);
printf("住址:
%s",p1->add);
printf("电话:
%s",p1->tel);
p1=p1->next;
l=strcmp(p1->name,b);
}
else
p1=p1->next;//结点后移
}
return(head);
}break;
case'4':
main();break;
}
}
voidsort(structstudent*head)
{
structstudent*p1,*p2,*p;
intn=1,i,j;
p1=p2=(structstudent*)malloc(LEN);
p=(structstudent*)malloc(LEN);
p1=head;
p2=p1;
p->num=p2->num;
while(p1->next!
=NULL)
{
n++;
p1=p1->next;
}
p1=head;
for(i=1;i { p1=head; for(j=1;j { p2=p1; p1=p1->next; if(p1->num<=p2->num) { p->num=p2->num; strcpy(p->name,p2->name); strcpy(p->sex,p2->sex); p->age=p2->age; strcpy(p->xueli,p2->xueli); p->wage=p2->wage; strcpy(p->add,p2->add); strcpy(p->tel,p2->tel); p2->num=p1->num; strcpy(p2->name,p1->name); strcpy(p2->sex,p1->sex); p2->age=p1->age; strcpy(p2->xueli,p1->xueli); p2->wage=p1->wage; strcpy(p2->add,p1->add); strcpy(p2->tel,p1->tel); p1->num=p->num; strcpy(p1->name,p->name); strcpy(p1->sex,p->sex); p1->age=p->age; strcpy(p1->xueli,p->xueli); p1->wage=p->wage; strcpy(p1->add,p->add); strcpy(p1->tel,p->tel); } } }printf("排序完成。 \n"); } structstudent*data(structstudent*head) { structstudent*p1; if(head==NULL||head->num==0){printf("没有职工信息,请添加! \n");return0;} else p1=head; printf("职工号\t\t姓名\t性别\t年龄\t学历\t工资\t地址\t电话\t\n"); do{ printf("%d\t%s\t%s\t%d\t%s\t%.2f\t%s\t%s\t\n", p1->num,p1->name,p1->sex,p1->age,p1->xueli,p1->wage,p1->add,p1->tel); p1=p1->next; }while(p1! =NULL); returnhead; } structstudent*save(structstudent*head)//保存职工资料 { FILE*fp; structstudent*p1; charfilename[15]={'s','n','.','t','x','t'}; p1=head; if((fp=fopen(filename,"w"))==NULL)//打开文件判断 { printf("不能打开文件! \n"); returnhead; } fprintf(fp,"计算机系职工信息管理系统\n"); fprintf(fp,"--------------------------------------------------------\n");//打印表格域 while(p1! =NULL)//从fp所指向的文件中存储信息 { fprintf(fp,"职工号: %d\t姓名: %s\t性别: %s\t年龄: %d\t学历: %s\t工资: %.2f\t地址: %s\t电话: %s\n", p1->num,p1->name,p1->sex,p1->age,p1->xueli,p1->wage,p1->add,p1->tel); p1=p1->next;//下移一个结点 } fprintf(fp,"--------------------------------------------------------\n");//打印表格域 fclose(fp); printf("文件已经保存! \n"); return0; } 7心得体会 通过这次c语言课程设计,我更深刻地认识到自己的不足。 有两个方面: 第一,我认识到理论的学习与实际的运用不是一回事,实际运用需要我们对知识更熟练地掌握,比如文件的操作和链表那一块;第二: 团队的有力合作帮助可以极大的提高效率,检查每一处错误。 当然也因此而有所提高,我相信自己会更进一步的! 8实习日志 6月20日: 搞清楚系统所需函数,写了一个框架 6月21日: 参考课本写了一段创建链表的函数,发现把文件运用到链表里,难度很大 6月22日: 首先确定自己做系统的步骤,要先把每个函数的功能先实现,再组合,其中数据的排序与文件的运用遇到一些问题 6月24日: 主要集中在完善模块函数上,排序函数比较困难,在参考了一些资料以后才有所了解,对于结构体的交换得调用strcpy函数,学习到一些经验 6月26日: 调试了所有的模块函数,模块的基本功能已经可以实现 6月27日: 对所有的模块函数向main函数里整合,然后进行了调试,发现整体有很多问题,最多的问题是参数与返回值的问题,后来直接把全局变量删掉换成局部变量 6月28日: 主要对程序整体进行完善 6月29日: 进行答辩,发现了查找函数的问题并进行了修改 6月30日: 提交程序设计报告和原程序 9参考文献 [1]向艳周天彤程起才史兵编著《C语言程序设计》北京: 清华大学出版社2008 [2]谭浩强主编《C语言程序设计》北京: 清华大学出版社2000 [3]黄明梁旭万洪莉编著《C语言课程设计》北京: 电子工业出版社2006
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 程序 报告