C语言课程设计 材料管理系统.docx
- 文档编号:7922967
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:35
- 大小:199.63KB
C语言课程设计 材料管理系统.docx
《C语言课程设计 材料管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计 材料管理系统.docx(35页珍藏版)》请在冰豆网上搜索。
C语言课程设计材料管理系统
中南大学
CentralSouthUniversity
课程设计报告
题目:
设计者:
专业班级:
学号:
指导教师:
所属院系:
2011年6月30日
目录
1、课程设计的目的……………………………………………………....1
2、设计任务要求.…………………………………………………..........1
3、总体设计方案…………………………………………………………...2
4、软件设计…………………………………………………………………...4
5、系统软件的调试及使用操作说明…………………………….5
6、源程序清单………………………………………………………………..6
7、课程设计总结……………………………………………………………22
8、参考文献.......................................................................22
1、课程设计的目的
本次“C语言程序设计实践”课程设计,是基于“C语言程序设计基础”课程学习内容的重要实践环节。
它是根据教学计划的要求,在教师的指导下,对学生实施程序设计训练的必要过程,是对前期课堂学习内容的综合应用及其效果的检验和提高。
通过课程设计的实践环节的教学,可以加深学生对所学内容的综合运用能力,同时也可以通过查询相关资料,培养学生自学能力,提高学习兴趣,增强学生程序设计能力,使学生得到很好的锻炼,为以后的学习打下坚实的基础。
2、设计任务要求
本次“C语言程序设计实践”课程设计,是基于“C语言程序设计基础”课程学习内容
的重要实践环节,其主要目的在于,通过综合程序课程设计,培养和提高学生的独立分析问
题、解决实际问题的能力和计算机语言编程能力。
本次课程设计时间为2周,要求每位同学在为期两周的时间段内,独立完成相关设计题所规定的任务(上机时数为20学时)。
进度安排建议如下:
1、阅读设计题目、任务内容,规划设计进度,并进行软件的各相关功能模块的规划设计。
2、在TurboC(或VisualC++6.0)环境下,用结构化程序设计思想进行C语言程序设计、功能模块调试(7-9天)。
相关管理系统设计题的基本功能要求:
●数据文件管理功能:
创建新文件、管理老文件。
●输入/添加/插入记录:
能够完成对任意一条记录输入、添加或插入数据表中,并
保存到数据文件中。
●显示、查询记录:
能够打开已存在的数据表文件,根据用户要求按所给记录关键字
显示、查询一个或多个相关联记录的各项信息。
●修改记录:
能够打开已存在的数据表文件,并对确定的任意记录进行修改,在修改
过程中,应显示记录信息,给出确认提示,并对更新的记录信息进行文件保存。
●删除记录:
能够打开已存在的数据表文件,可以删除数据表中的任一记录,要求具
备逻辑删除(具有恢复功能)和物理删除功能,并对新的数据表信息进行文件保存。
●统计功能:
能够打开已存在的数据表文件,对数据表中与某关键字匹配的相关记录
进行数据统计(包括:
总数、平均值、分段信息),例如:
按课程得分为100、90~99、80~89、70~79、60~69和不及格学生的人数,以及所占百分比。
●排序:
对记录进行排序。
例如:
按某门课程的成绩排序,或按成绩总分进行排序等。
在正确、合理的软件功能规划的基础上,进行各功能模块的设计。
建议用文件包含或工程文件形式,进行逐个模块的功能调试与功能实现。
切忌将多个功能模块混合一起进行调试。
自顶向下,逐步细化、逐步求精,对于给定问题进行透彻的了解和详细的分析的基础上,把问题分解成若干个按顺序执行的逻辑部分,称为“模块”。
每个子任务如果仍很复杂,还可以再分解为若干个子任务。
如此逐层分解,对于每个模块的设计都采用这种“自顶向下、逐步细化”的方法,将它们分解成为基本结构为止。
当一个程序的规模比较庞大,层次和模块比较多时,不要每次都将所有模块按顺序执行一遍,最好在每一层,至少在最高几层都设一个“菜单”。
为方便用户操作,“菜单”技术已广泛使用在计算机的系统软件中,具体做法是:
程序首先把各功能说明及相应代号以菜单形式显示在屏幕上,然后由用户在键盘上输入所选的功能代号,程序自动转去调用相应的功能模块进行处理。
3、总体设计方案
设计题目:
材料管理系统
设计内容:
调研、选择一个典型仓库材料信息管理案例,实现材料库存、领用信息信息管理。
每种材料的记录信息,包括:
编号、名称、单价、入库数量、库存数量、出库数量、保管人、进货时间、出货时间和备注等。
设计流程图:
主菜单:
分别执行添加、显示、查找、删除、修改、排序、恢复、统计、打开排序文件等功能。
程序代码如下:
menu1()/*huanying*/
{}
menu2()/*caidanhanshu*/
{
printf("\t\n");
printf("\t\n");
printf("\t***KECHENSHEJI***\n");
printf("\t\n");
printf("\t***CAILIAOGUANLIXITONG***\n");
printf("\t\n");
printf("\t***DIANQIXINXILEI***\n");
printf("\t\n");
printf("\t*******************************************************************\n");
printf("\t*1.Theinformationofaddstuff*\n");
printf("\t*2.Theinformationofallstuff*\n");
printf("\t*3.searchstuff*\n");
printf("\t*4.Deletetheinformation*\n");
printf("\t*5.Revisetheinformation*\n");
printf("\t*6.Arrangetheinformation*\n");
printf("\t*7.Theinformationhasbeendeleted*\n");
printf("\t*8.Thecuontoftheinformation*\n");
printf("\t*9.managethefile*\n");
printf("\t*0.Break*\n");
printf("\t*******************************************************************\n");
}
在程序中应用结构体链表思想,将材料信息串起来,方便进行各个功能块的建立。
其程序代码如下:
structmaterial/*定义材料结构体类型*/
{intnum;/*编号*/
charname[20];/*名称*/
intprice;/*单价*/
intinamount;/*入库数量*/
intsaveamount;/*库存数量*/
intoutamount;/*出库数量*/
charstorekeeper[20];/*保管人*/
intintime;/*入库时间*/
intouttime;/*出库时间*/
charinstruction[20];/*备注*/
intdelet;}/*删除*/
work[50];
staticn=1;intf,g=1,e;
FILE*fp1;
charfname[20];/*文件名*/
4、软件设计
添加函数部分:
在系统数据为空时,应用输入函数,依次输入材料的编号、名称、单价、入库数量、
库存数量、出库数量、保管人、入库时间、出库时间、备注等信息。
当序号为零时
退出。
显示函数部分:
使用输出函数,直接显示出整个材料库的情况。
查找函数部分:
以材料的编号为查找依据,在整个链表里依次判断。
若指针指向为空,则判定无
此材料;若输入序号与指针所指序号相同,就输出此材料信息。
结束一次查找后,
则进行是否进行下一次查找的判断。
删除函数部分:
以材料的编号和名称为查找依据,在整个链表里依次判断。
若指针指向为空,则判
定无此材料;若输入序号与指针所指序号相同,就询问时逻辑删除还是物理删除。
若是逻辑删除,则先判定回收站是否还有空位,若没有则提示无法逻辑删除,若
有则执行任务。
若是物理删除,则不需要判定回收站情况,直接执行任务。
删除方
式均是使前一个结点的链表指针跳过它,直接指向它的下一个结点。
修改函数部分:
以图书的名称和单价为查找材料的依据,在整个链表里依次判断。
若没找到相
应信息,则做出提示并结束;若找到相应信息,则进入重新输入材料信息的界
面,进行修改。
结束一次修改后,则进行是否进行下一次修改的判断。
排序函数部分:
根据材料的单价和数量进行排序。
恢复函数部分:
先判断逻辑删除的结点的地址指针是否为空。
若为空,则提示没有可恢复的
数据;若不为空,则显示可恢复信息的材料的编号供选择。
若输入的号码不符合,
则提出错误,当成功恢复后再次询问是否继续恢复。
统计函数部分:
使用了for循环。
可对每种材料的情况,所有材料的累计单价和种类数,进
行了统计。
打开文件函数部分:
以文件夹名为查找依据,若输入的名称与保存的名称不符则提示出错,若名
称相符,则用输出文件显示保存的所有材料的信息。
5、系统软件的调试及使用操作说明
(1)、进入系统
进入菜单后通过选择进行操作。
(2)添加文件
根据系统提示进行有关材料信息的输入。
(3)显示函数
输入完成后,通过显示函数列出所输入的材料信息。
(4)查找函数
根据系统提示,通过材料名称或编号对材料的信息进行查找。
(5)修改函数
根据系统提供信息对材料信息进行修改,修改成功后将材料信息进行保存。
(6)排序函数
根据系统提供信息,以材料的单价或数量对其进行排序。
(7)恢复函数
对进行了操作了的材料信息进行恢复处理。
(8)统计函数
根据材料的单价对所有的材料进行统计处理。
6、源程序清单
#include
structmaterial
{intnum;
charname[20];
intprice;
intinamount;
intsaveamount;
intoutamount;
charstorekeeper[20];
intintime;
intouttime;
charinstruction[20];
inttotal;
intdelet;}
work[50];
staticn=1;intf,g=1,e;
FILE*fp1;
charfname[20];
jianli()/*创建新文件*/
{
inti,x=0;FILE*fp;
system("cls");
menu1();
menu2();
printf("\t\t\tInputthefname!
");
scanf("%s",fname);
fp=fopen(fname,"rb");
for(i=0;i<50;i++)
{fread(&work[i],sizeof(structmaterial),1,fp);
if(work[i].total!
=0)x++;
}
fclose(fp);n=x;
}
r()
{
inti;FILE*fp;
if((fp=fopen(fname,"rb"))==NULL)
{
printf("\n\n\t\tcannotopenfile!
\n");}
printf("num/name/price/inputamount/Save/Output/keeper/intime/outtime/instruction\n");
for(i=0;i { fread(&work[i],sizeof(structmaterial),1,fp); if(work[i].delet==0) printf("%-4d%-5s%-6d%-9d%-5d%-7d%-5s%-5d%-6d%-7s\n",work[i].num,work[i].name,work[i].price,work[i].inamount,work[i].saveamount,work[i].outamount,work[i].storekeeper,work[i].intime,work[i].outtime,work[i].instruction); } fclose(fp); } r1() { inti;FILE*fp; if((fp=fopen(fname,"rb"))==NULL) { printf("\n\n\t\tcannotopenfile! \n");} printf("num/name/price/inputamount/Save/Output/keeper/intime/outtime/instruction\n"); for(i=0;i { fread(&work[i],sizeof(structmaterial),1,fp); if(work[i].delet==1) printf("%-4d%-5s%-6d%-9d%-5d%-7d%-5s%-5d%-6d%-7s\n",work[i].num,work[i].name,work[i].price,work[i].inamount,work[i].saveamount,work[i].outamount,work[i].storekeeper,work[i].intime,work[i].outtime,work[i].instruction); } fclose(fp); } display2()/*显示所有信息*/ { inti,d=0;FILE*fp; fp=fopen(fname,"rb"); system("cls");menu1(); printf("Followsistheinformationofallmaterial! \n"); for(i=0;i fread(&work[i],sizeof(structmaterial),1,fp); printf("num/name/price/inputamount/Save/Output/keeper/intime/outtime/instruction\n"); for(i=0;i if(work[i].delet==0) {d++; printf("%-4d%-5s%-6d%-9d%-5d%-7d%-5s%-5d%-6d%-7s\n",work[i].num,work[i].name,work[i].price,work[i].inamount,work[i].saveamount,work[i].outamount,work[i].storekeeper,work[i].intime,work[i].outtime,work[i].instruction); } if(d==0)printf("Failed! tryitagain! \n"); printf("Pressanyfigurekeytoreturn! \n"); scanf("%d",&i); } display1()/*显示信息*/ {inti;intd=0; printf("Thisistheinformationafterarrang: \n"); printf("num/name/price/inputamount/Save/Output/keeper/intime/outtime/instruction\n"); for(i=0;i if(work[i].delet==0) {d++; printf("%-4d%-5s%-6d%-9d%-5d%-7d%-5s%-5d%-6d%-7s\n",work[i].num,work[i].name,work[i].price,work[i].inamount,work[i].saveamount,work[i].outamount,work[i].storekeeper,work[i].intime,work[i].outtime,work[i].instruction); } if(d==0){printf("Failed! tryitagain! \n");system("pause");} } save()/*保存函数*/ {FILE*fp;inti; system("cls");menu1(); printf("Press1tosaveinthesamePress2tosaveinanother\n"); scanf("%d",&e); while (1) { if(e==1) { if((fp=fopen(fname,"w"))==0) {printf("cannotopen\n");return;} for(i=0;i if(fwrite(&work[i],sizeof(structmaterial),1,fp)! =1) printf("error! \n");break; } elseif(e==2) { printf("inputjianlifilename! \n"); scanf("%s",fname); if((fp=fopen(fname,"w"))==0) {printf("cannotopen\n");return;} for(i=0;i if(fwrite(&work[i],sizeof(structmaterial),1,fp)! =1) printf("error! error! \n");break; } elseprintf("error! \n"); } fclose(fp); system("cls");menu1(); printf("OK! \n\n");system("pause"); } slect() { intd,i;system("cls");menu1();menu2();scanf("%d",&d); if(d==1){add();slect();} elseif(d==2){display2();slect();} elseif(d==3){cha();slect();} elseif(d==4){delet();slect();} elseif(d==5){modify();slect();} elseif(d==6){order();slect();} elseif(d==7){recy();slect();} elseif(d==8){tongji();slect();} elseif(d==9){jianli();slect();} elseif(d==0){printf("exit! \n\n");exit();} else{printf("error! \n");slect();} } cha()/*查询*/ { inti,num,c,suc=0,suc1;charname[20];FILE*fp; fp=fopen(fname,"rb"); for(i=0;i fread(&work[i],sizeof(structmaterial),1,fp); while (1) { system("cls");menu1(); printf("Youhavetwowaytosee: \n"); printf("Press1toseeitbynamePress2toseeitbynumber\n"); scanf("%d",&c); system("cls");menu1(); if(c==1) {printf("Inputthename\n"); scanf("%s",name);break;} elseif(c==2) {printf("Inputthenumber\n"); scanf("%d",&num);break;} elsewhile (1) {system("cls");menu1();printf("errors! ! ! \n"); printf("Press0totryagainPress1toreturn\n"); scanf("%d",&suc); if(suc==0||suc==1) break; elsecontinue; } if(suc==1)break; } if(suc! =1) { for(i=0;i if((strcmp(name,work[i].name)==0||num==work[i].num)&&work[i].delet==0)break; if(i {system("cls");menu1(); printf("num/name/price/inputamount/Save/Output/keeper/intime/outtime/instruction\n"); printf("%-4d%-5s%-6d%-9d%-5d%-7d%-5s%-5d%-6d%-7s\n",work[i].num,work[i].name,work[i].price,work[i].inamount,work[i].saveamount,work[i].outamount,work[i].storekeeper,work[i].intime,work[i].outtime,work[i].instruction); printf("Pressanyfigurekeytocontinue! \n"); scanf("%d",&i); } else{system("cls");menu1(); printf("I'msorry! Itcannotbefound..! \n\n",i); printf("Pressanyfigurekeytocontinue! \n"); scanf("%d",&i);} while(1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言课程设计 材料管理系统 语言 课程设计 材料 管理 系统