C语言程序的设计实践课程报告文档格式.docx
《C语言程序的设计实践课程报告文档格式.docx》由会员分享,可在线阅读,更多相关《C语言程序的设计实践课程报告文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
一、提交材料应包括:
(1)系统源代码
(2)课程报告
二、整个设计过程具体要求
(1)需求分析要求学生对案例系统进行分析,设计出需要完成的功能,完善各个模块的调用关系;
(2)设计过程要求学生进一步明确各模块调用关系,进一步完善模块函数细节(函数名、参数、返回值等)
(3)实现过程要求学生养成良好的编码习惯、完成各个模块并进行测试,最终完成系统整体测试;
(4)总结阶段按照要求完成系统设计和实现报告,并进行总结、答辩。
成绩
评定
报告撰写情况(30分)
系统完成情况(30分)
答辩情况(40分)
总分
容20分
规程度5分
程序测试5分
基本功能20分
扩展功能10分
自述情况10分
答辩情况30分
成绩评定教师:
1.需求分析
经过大一上学期的理论学习,在基础实验的基础上,本学期我们继续开设了C语言程序设计实践课。
课程要求我们对已经学习的基础实验进行整合与衔接处理,并最终形成一个系统性质的规模较大的程序。
本次课程设计要求我们达到能独立完成一个图书管理系统,完成后要现的功能有对图书信息的录入、删除、修改,浏览(即输出),按某种方式查询(要求至少一种查询方式),按某种方式排序(要求至少一种排序方式)。
当然,我们可以根据自己的能力对系统进行完善性的拓展,例如自己加入简单的权限处理,统计功能,模糊查询等,甚至可以拓展为图书借阅系统。
通过整个程序的开发过程,最终使我们掌握利用计算机解决实际问题的基本方法,熟悉C语言开发的全过程,提高综合应用C语言的能力、编程和调试能力,为学习计算机后续课程打好专业基础。
2.概要设计
1.系统采用的是结构数组数据系统,用于实现图书信息的存放,修改,排序等功能。
用二进制文件保存已写入的信息。
2.模块划分:
1 voidAddNewbook图书信息录入系统
2 voidRprint图书信息浏览系统
3 voidQuerybook图书信息查询系统:
voidnumnode1-书籍编号查找.2-书名voidnamenode查找.3-voidwriter作者查找.4-voidpress查找.5-voidfuzzy模糊查找.
4 voidpaixu图书信息排序系统:
1-价格排序2-时间排序
5 Voidexiugai图书信息修改系统
6 Voidshanchu图书信息删除系统
7图书信息统计系统:
1-voidsorttongji书籍类别统计.2-voidkuno库存低于标准统计
3.程序框架
1 进行录入图书信息
2 录入后进行浏览系统
3 然后根据需要分别进行查询,排序,修改,删除,统计功能
3.详细设计:
1.定义图书结构:
typedefstructbook{
longnum;
//书的序号
charname[MAX];
//书名
chartime[MAX];
//出版时间
charwriter[MAX];
doubleprice;
charpress[MAX];
//
charsort[MAX];
intkucun;
//库存量
}book;
2.图书录入系统:
voidAddNewbook(FILE*fp){//*添加书籍
system("
cls"
);
inta;
if((fp=fopen("
图书信息.txt"
"
a+"
))==NULL){
printf("
不能打开图书信息管理系统!
\n"
exit(0);
}
booknewbook;
printf("
(-1代表结束)"
while(a!
=-1){
输入书籍编号:
"
scanf("
%ld"
&
newbook.num);
输入书名:
%s"
newbook.name);
输入出版时间:
newbook.time);
输入"
newbook.writer);
输入价格:
%lf"
newbook.price);
输入:
newbook.press);
输入书籍种类:
newbook.sort);
输入库存量:
%d"
newbook.kucun);
fwrite(&
newbook,size,1,fp);
a);
}
fclose(fp);
3.图书浏览系统
voidRprint(FILE*fp){//图书信息浏览
if((fp=fopen("
r+"
booklog;
书籍编号书名出版时间作者价格种类库存量\n"
while(!
feof(fp)){
fread(&
log,sizeof(book),1,fp);
%8ld%s%6s%10s%.2lf%s%s%d\n"
log.num,log.name,log.time,log.writer,log.price,log.press,log.sort,log.kucun);
}
4.图书查询系统
一.按编号查找
voidnumnode(FILE*fp){
r"
inti=0;
bookchaxun;
Enternum:
num);
fread(&
chaxun,size,1,fp);
if(num==chaxun.num){
%ld\t%s\t%s\t%s\t"
chaxun.num,chaxun.name,chaxun.time,chaxun.writer);
%.2lf\t%s\t%d\n"
chaxun.price,chaxun.sort,chaxun.kucun);
i=1;
if(i!
=1)
对不起,没有你想要查找的书籍。
二.按书名查找
voidnamenode(FILE*fp){
Entername:
name);
if(strcmp(name,chaxun.name)==0){
printf("
%ld\t%s\t%s\t%s\t%.2lf\t%s\t%d\n"
chaxun.num,chaxun.name,chaxun.time,chaxun.writer,
chaxun.price,chaxun.sort,chaxun.kucun);
i=1;
}
三.按作者名查找
voidwriternode(FILE*fp){
Enterwriter:
writer);
if(strcmp(writer,chaxun.writer)==0){
四.按查找
voidpressnode(FILE*fp){
Enterpress:
press);
if(strcmp(press,chaxun.press)==0){
i=1;
五.模糊查询
voidfuzzy(FILE*fp){
intk=0;
charzifu[MAX];
输入关键字:
getchar();
inti,j;
for(i=0;
(zifu[i]=getchar())!
='
\n'
;
i++);
zifu[i]='
\0'
for(i=0;
zifu[i]!
i++)
for(j=0;
chaxun.writer[j]!
j++)
if(zifu[i]==chaxun.writer[j]){
printf("
chaxun.num,chaxun.name,chaxun.time,chaxun.writer,
chaxun.price,chaxun.sort,chaxun.kucun);
k=1;
}
if(k!
}
4.排序功能
一按价钱排序
voidprice(FILE*fp){
intn;
inti=1,j;
n=tongji(fp);
bookt;
bookpaixu[MAX];
paixu[i],size,1,fp);
i++;
for(i=1;
i<
n;
for(j=1;
j<
n-i;
if(paixu[j].price>
paixu[j+1].price){
t=paixu[j];
paixu[j]=paixu[j+1];
paixu[j+1]=t;
paixu[i].num,paixu[i].name,paixu[i].time,paixu[i].writer,
paixu[i].price,paixu[i].sort,paixu[i].kucun);
二.按时间排序
voidtime(FILE*fp){
bookpaixu[MAX],t;
=n;
=n-i;
if(strcmp(paixu[j].time,paixu[j+1].time)>
0){
paixu[i].num,paixu[i].name,paixu[i].time,
paixu[i].writer,paixu[i].price,paixu[i].sort,paixu[i].kucun);
三.排序选择
voidpaixu(FILE*fp){
intchoice=-1;
1-价格排序\n2-时间排序\n"
choice);
switch(choice){
case1:
price(fp);
break;
case2:
time(fp);
default:
printf("
error\n"
}}
5.修改功能
voidbookxiugai(FILE*fp){
FILE*t;
intn=0;
if((t=fopen("
intchoice;
bookxiugai;
bookduqu;
输入要修改书的编号:
feof(t)){
duqu,size,1,t);
if(num==duqu.num){
请输入修改后的书籍信息:
请输入书籍编号:
scanf("
xiugai.num);
请输入书名:
xiugai.name);
请输入"
xiugai.writer);
请输入出版时间:
xiugai.time);
请输入价格:
xiugai.price);
请输入:
xiugai.press);
请输入书籍种类:
xiugai.sort);
请输入库存量:
xiugai.kucun);
n=i;
}}
fseek(t,(n-1)*size,0);
1-确认修改。
\n其他数字-取消修改。
if(choice==1){
fwrite(&
xiugai,size,1,t);
printf("
修改成功!
6.删除功能
voidbookshanchu(FILE*fp){
inti=1,n;
bookduqu[MAX];
duqu[i],size,1,fp);
i++;
if((t=fopen("
w"
i++){
if(num!
=duqu[i].num){
fwrite(&
duqu[i],size,1,t);
fclose(t);
7.。
统计功能
一.按类别统计
voidsorttongji(FILE*fp){
booksor;
请输入书籍类别:
sort);
sor,size,1,fp);
if(strcmp(sort,sor.sort)==0)
i++;
本类别的书籍种类有%d\n"
i);
二.按库存标准统计
voidkuno(FILE*fp){
bookkcun;
请输入标准库存量:
n);
kcun,size,1,fp);
if(n>
kcun.kucun)
kcun.num,kcun.name,kcun.time,
kcun.writer,kcun.price,kcun.sort,kcun.kucun);
三.统计选择函数
voidtongjixinxi(FILE*fp){
1-书籍类别统计.\n2-库存低于标准统计.\n"
case1:
sorttongji(fp);
case2:
kuno(fp);
default:
4.调试分析:
问题一界面不美观,进入一次系统只能进行一项操作的问题
解决方法通过将主菜单与清屏函数(system(“cls”))一起,在每次进行完一次具体操作后都能出现printf("
Enteryourchoice:
问题二:
浏览图书信息时编号等文字与下面的图书信息不对应
解决办法:
文字与文字间的间隔与字符字符间的间隔一致
问题三:
一些小错误比如单词前后拼写错误
反复调试修改
问题四:
在查询中由于回车符释放过多使信息录入异常
去掉多余的getchar()
问题五:
输入时无法结束输