C语言程序实践报告.docx
《C语言程序实践报告.docx》由会员分享,可在线阅读,更多相关《C语言程序实践报告.docx(13页珍藏版)》请在冰豆网上搜索。
C语言程序实践报告
C语言程序设计报告
图书管理系统
学生学号XXXXXXXXXX
学生姓名XXX
学生系别信息工程系
班级XXXX
指导老师XX
日期
目录
一、需求分析··········································3
二、概要设计··········································3
1.系统功能组成框图················································3
2.程序的文件存储设计··············································4
3.模块功能说明····················································4
4.主函数流程图····················································5
三、详细设计··········································5
1.头函数·························································5
2.主函数·························································6
3.录入···························································7
4.输出···························································8
5.查询···························································8
6.删除···························································9
7.分类···························································10
8.修改···························································11
八、心得················································13
图书管理系统
编程实践是学习C语言程序设计的一重要环节,上机实习和课程设计是提高同学们程序设计能力的有效途径,能够使同学们初步掌握程序设计的基本方法和调试技能。
学校安排上机时间有限,老师也只能教给我们一些方法,而我们自己需要投入很大的时间和精力来锻炼。
一、需求分析
图书信息包括:
登录号,书名,作者名,分类号,出版单位,出版时间,价格等。
使之提供以下功能:
(1)图书信息录入功能。
(图书信息用文件保存)。
(2)图书信息浏览功能。
(3)图书信息查询功能。
(4)图书信息的删除和修改。
(5)图书信息的排序功能。
二、概要设计
1.系统功能组成框图
2.程序的文件存储设计
程序数据存取主要由三个文件:
book.txt、record.txt、car.txt组成。
Book.txt:
主要存储图书数据,程序的增加图书、删除图书、查阅图书等
功能均是对些文件进行读取操作。
Record.txt:
借书记录存储文件,主要用来储存书籍的借出与归还信息。
Car.txt:
学生卡号储存文件。
另外在程序运行的时候还增加了一个临时文件book1.txt,它的主要功能是
防止因为误操作对源文件book.txt的数据破坏。
3.模块功能说明
本程序包括七个主要模块
1主程序模块
main()
{
清屏并显示主菜单提示用户选择所要执行的操作
根据用户的选择执行相应模块
}
2录入模块——实现图书信息的录入
3显示模块——实现图书信息的显示
4查询模块——按用户指定要求(书名或书名号)查询指定对象的图书信息
5删除模块——删除相应对象的图书信息
6修改模块——修改相应对象的图书信息
7排序模块——按用户指定要求(书名或书名号)将图书信息进行排序
注:
因为分组做程序,本人被安排到修改模块,加上老师要求必做的录入与显示模块,共三个小程序,其余模块皆为同学共同完成。
4.主函数流程图
初始化、定义主菜单、分支菜单指针数组及变量
读键盘按键的键值
判断键值并弹出对应菜单
Y
用户按了0键吗?
N
根据按键执行菜单选项对应的函数
从被调用函数中返回并转移
退出管理系统
图3系统主函数流程图
三、详细设计
1.头函数
#include
structlibrary
{
intdel;删除标记,0表示删除
intnumber;登陆号
charname[20];书名
charauthor[30];作者名
charsort[40];分类号
charpublisher;出版社
intprice;价格
}lib[10];
intn=3;
2.主函数
main()
{charch;
do{clrscr();
printf("***************************\n");
printf("WelcomeToLibrarySystem!
\n");
printf("***************************\n");
printf("iorI-----input\n");录入
printf("porP-----output\n");浏览
printf("qorQ-----inquire\n");查询
printf("dorD-----delete\n");删除
printf("sorS-----sort\n");分类
printf("morM-----modify\n");修改
printf("eorE-----exit\n");退出
printf("Pleaseselect:
\n");
ch=getchar();
if(ch=='i'||ch=='I'){input();getch();}
elseif(ch=='p'||ch=='P'){output();getch();}
elseif(ch=='q'||ch=='Q'){inquire();getch();}
elseif(ch=='d'||ch=='D'){delete();getch();}
elseif(ch=='a'||ch=='A'){insert();getch();}
elseif(ch=='s'||ch=='S'){sort();getch();}
elseif(ch=='m'||ch=='M'){modify();getch();}
elseif(ch=='e'||ch=='E'){exit(0);getch();}
}while
(1);
}
3.录入
增加图书:
在管理系统中选择“iorI”,然后输入书籍的序号,书名、作者和分类号,即可完成添加图书操作。
input()
{FILE*fp;
inti;
if((fp=fopen("libr.dat","wb"))==NULL)
{printf("cannotopenthefile!
");exit(0);}
printf("Pleaseinputlibraryinformation:
\n");
for(i=0;i{scanf("%d%s%s%s%d",&lib[i].number,lib[i].name,lib[i].author,lib[i].sort,&lib[i].price);}
for(i=0;ifwrite(&lib[i],sizeof(structlibrary),1,fp);
fclose(fp);}
4.输出
浏览图书:
在管理系统中选择“porP”,可查看输入书籍的序号,书名、作者和分类号。
output()
{FILE*fp;
inti;
if((fp=fopen("libr.dat","rb"))==NULL)
{printf("cannotopenthefile!
");exit(0);}
n=0;
while(fread(&lib[n],sizeof(structlibrary),1,fp)==1)n++;
printf("NO.\tName\tAuthor\tSort\tPrice\n");
for(i=0;iprintf("%d\t\t%s\t\t%s\t%s\t\t%d\n",lib[i].number,lib[i].name,lib[i].author,lib[i].sort,lib[i].price);
fclose(fp);}
5.查询
inquire()
{FILE*fp;
inti,k;charname[20],author[30];
if((fp=fopen("libr.dat","rb"))==NULL)
{printf("cannotopenthefile!
");exit(0);}
n=0;
while(fread(&lib[n],sizeof(structlibrary),1,fp)==1)n++;
printf("1---name,2---author\n");
printf("Pleaseselect1or2\n");
scanf("%d",&k);
if(k==1)
{printf("Pleaseinputname:
\n");
scanf("%s",name);
for(i=0;iif(strcmp(name,lib[i].name)==0)printf("%d\t\t%s\t\t%s\t%s\t\t%d\n",lib[i].number,lib[i].name,lib[i].author,lib[i].sort,lib[i].price);
}
if(k==2)
{printf("Pleaseinputauthor:
\n");
scanf("%s",author);
for(i=0;iif(strcmp(author,lib[i].author)==0)printf("%d\t\t%s\t\t%s\t%s\t\t%d\n",lib[i].number,lib[i].name,lib[i].author,lib[i].sort,lib[i].price);
}
fclose(fp);}
6.删除
delete()
{FILE*fp;
inti,j,k;
charname[20],author[30];
if((fp=fopen("libr.dat","rb"))==NULL)
{printf("cannotopenthefile!
");exit(0);}
n=0;
while(fread(&lib[n],sizeof(structlibrary),1,fp)==1)n++;
fclose(fp);
if((fp=fopen("libr.dat","wb"))==NULL)
{printf("cannotopenthefile!
");exit(0);}
printf("Pleaseinputwillbedeletedlibraryinformation:
\n");
printf("1---name,2---author\n");
printf("Pleaseselect1or2\n");
scanf("%d",&k);
if(k==1)
{printf("Pleaseinputname:
\n");
scanf("%s",name);
for(i=0;iif(strcmp(name,lib[i].name)==0)
for(j=i;jif(k==2)
{printf("Pleaseinputauthor:
\n");
scanf("%s",author);
for(i=0;iif(strcmp(author,lib[i].author)==0)for(j=i;jfor(i=0;ifwrite(&lib[i],sizeof(structlibrary),1,fp);
fclose(fp);}
7.分类
分类图书:
在管理系统中选择“sorS”,选择1按书名号排序,选择2按分类号排序。
sort()
{FILE*fp;
inti,k,j,number;
structlibraryt;
if((fp=fopen("libr.dat","rb"))==NULL)
{printf("cannotopenthefile!
");exit(0);}
n=0;
while(fread(&lib[n],sizeof(structlibrary),1,fp)==1)n++;
fclose(fp);
if((fp=fopen("libr.dat","wb"))==NULL)
{printf("cannotopenthefile!
");exit(0);}
printf("1---number,2---sort\n");
printf("Pleaseselect1or2\n");
scanf("%d",&k);
if(k==1)
{for(i=0;ifor(j=0;jif(lib[j].number>lib[j+1].number){t=lib[j];lib[j]=lib[j+1];lib[j+1]=t;}}
if(k==2)
{for(i=0;ifor(j=0;jif(lib[j].sortfor(i=0;ifwrite(&lib[i],sizeof(structlibrary),1,fp);
fclose(fp);}
8.修改
修改图书:
在管理系统中选择“morM”,选择1输入书名号,开始修改;选择2查看书名,开始修改。
modify()
{FILE*fp;
inti,k,dlh;
charsm[20];
if((fp=fopen("libr.dat","rb+"))==NULL)
{printf("cannotopenthefile!
");exit(0);}
n=0;
while(fread(&lib[n],sizeof(structlibrary),1,fp)==1)n++;
printf("1---number,2---name\n");
printf("Pleaseselect1or2\n");
scanf("%d",&k);
if(k==1)
{printf("Pleaseinputnumber:
\n");
scanf("%d",&dlh);
for(i=0;iif(dlh==lib[i].number)
{printf("Pleaseinputnewdata:
\n");
scanf("%d%s%s%s%d",&lib[i].number,lib[i].name,lib[i].author,lib[i].sort,&lib[i].price);}
}
if(k==2)
{printf("Pleaseinputname:
\n");
scanf("%s",sm);
for(i=0;iif(strcmp(sm,lib[i].name)==0)
{printf("Pleaseinputnewdata:
\n");
scanf("%d%s%s%s%d",&lib[i].number,lib[i].name,lib[i].author,lib[i].sort,&lib[i].price);}
}
rewind(fp);
for(i=0;ifwrite(&lib[i],sizeof(structlibrary),1,fp);
fclose(fp);}
八、心得
设计过程的感受与体会
学了一学期C语言课,感觉到自己掌握的不多。
在课程设计中,需要更改一部分系统,刚开始的时候真的头都大了,发现以前自以为懂的,用起来却好象并不是那么一回事,只好一点一点的学习,一遍一遍的复习。
课程设计刚开始的时候,我真的感觉无从下手。
因为已经过去一个学期了,期间又没有怎么看书,考完试就放下了,许多知识都已经忘记。
不过因为专业原因,实训只有一周,老师也没有为难我们,发了一个样本,要求我们仿写,通过老师的讲解,发现并不是想象中那么难,20人为一大组,大组分4小组,分工明确,任务变少,换句话说,整个程序是与其他同学共同完成的。
一周时间过的很快,经过这一周的努力,自己对C语言的掌握多多少少比以前好一些,可以运用到实践中,渐渐脱离课本。
可是总感觉到不够用,因为在设计过程中遇到很多问题自己都不能独立解决。
所以,书还是要看的。
遇到的问题与解决方法
在设计过程中,由于对各种概念还不是很熟悉,不能随心运用,翻书是经常的事,最头疼的是对程序的理解。
并且,在运行中发现的错误通常不知道出错在哪,细节方面,自己掌握的还不足。
解决方法
有问题,第一时间看书,看不懂的请教同学,但有时候他们跟我说了半天我都还是很茫然,然后看同学的代码,看多了就有点感觉了。
我也会上网搜,通常都会有解决的方案,再不行的话就打算问老师,问老师是最后的办法,自己掌握的不够,我怕老师越讲我越愧疚,