秦思军《C语言课程设计》课程设计.docx
- 文档编号:15585482
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:50
- 大小:464.56KB
秦思军《C语言课程设计》课程设计.docx
《秦思军《C语言课程设计》课程设计.docx》由会员分享,可在线阅读,更多相关《秦思军《C语言课程设计》课程设计.docx(50页珍藏版)》请在冰点文库上搜索。
秦思军《C语言课程设计》课程设计
YangtzeUniversityCollegeofArtsandScience
学生实习手册
(课程设计报告)
学部:
理工学部
专业:
电子信息工程
班级:
5111班
姓名:
秦思军
学号:
20114002
课程名称:
C语言程序设计课设
指导教师:
杜红呙明辉
实习时间:
2012年7月6日至2012年7月14日
一、课设题目
图书管理系统
二、设计目的
问题描述:
本程序属于非数值计算型算法设计,学生需要设计出图书馆模拟系统所需要的基本功能,并设计简单的界面(无需图形化)。
实现功能:
1、通过提示菜单选择可以进行的操作
2、将图书的基本信息存入文件中,并命名为book.txt
3、将图书借阅统计信息存入文件中,并命名为record.txt
4、将图书卡号统计信息存入文件中,并命名为card.txt
4、在本系统中可以进行管理系统包含的基本操作,其中包括:
a)输入图书的图书名或作者名,从当前图书中进行查找,如果找到则显示该图书的相关信息,如果没有找到则给出提示信息;
b)添加图书的基本信息,通过输入图书相关信息,首先查找是否存在该图书名的图书,如果存在则提示重新输入,否则将该图书按照顺序插入到相应位置;
c)修改图书的基本信息,通过输入图书名,首先查找是否存在该图书名的图书,如果存在则提示重新输入,否则将提示修改项(序号、书名、作者、单价),依据提示进行修改;
d)删除图书的基本信息,通过输入图书名,首先查找是否存在该图书名的图书,如果存在则将该图书删除,否则给出提示信息,提示该图书不存在;
e)借阅图书,需要给出卡号和图书书名,如果图书名不存在则重新输入,直到输入正确为止,并将学号和相应的图书名存入record.txt文件中。
f)归还图书,需要输入卡号和图书书名,如果图书名不存在则重新输入,直到输入正确为止,然后确认归还;
g)统计分为对在架图书、学生借阅图书、借书卡三项的统计,申请卡号借阅书籍会对三项统计进行修改,显示。
5、图书基本信息包括图书序号、书名、作者、单价、状态这些简单信息。
6、图书信息文件中每一行存放一本图书的信息。
7、借阅信息文件中每一行存放一本书的借阅情况。
掌握知识点:
本程序主要考察对自定义函数的熟悉程度,本程序中主要使用到的是数组和文件的相关操作,包括数组的输入、输出、查找、插入、删除、修改和文件不同形式的读取、写入等操作,需要对数组和文件有比较深入的掌握。
三、总体设计
1、图书管理系统组成框图
2、调用的借阅、卡号统计函数流程图
3、调用的删除图书、卡号函数流程图
4、调用修改图书函数流程图
四、详细设计
模块功能说明:
(包括结构体、借阅统计函数、卡号统计函数、删除图书函数、删除卡号函数、修改图书函数)
1、结构体:
包括学生借阅信息、图书相关信息、借阅卡信息
structstudent//学生借阅信息结构体
{
intcardnum;//卡号
charborrowbook[10];//借阅图书
}student[100];
structbook//图书相关信息结构体
{
intbooknum;//图书序号
charbookname[20];//图书名
intbookprice;//图书单价
charbookauthor[20];//图书作者
intstatus;//图书状态
}book[100];
structcard//借阅卡信息结构体
{
intcardnum;//卡号
charsex[4];//性别
charstudentname[20];//学生姓名
intstudentclass;//学生班级
}card[100];
2、借阅统计函数功能:
在被调用时,将图书库里的所有被借图书统计起来,当增加或删除图书时,不能改变此统计结果;当借出或归还时,才能改变它;(此函数无参数,所以无参数说明和函数调用关系)
borrowcount()//借阅统计
{
system("cls");//清屏
FILE*fp;
inti,n=0;
printf("\n\t\t\t借书统计\n\n");//进入借书统计界面
fp=fopen("record.txt","r");//将文件record.txt以读的方式打开
for(i=0;fread(&student[i],sizeof(structstudent),1,fp)!
=0;i++)
{
printf("\t卡号\t\t借出的书籍\n");
printf("\t%d\t\t%s\n",student[i].cardnum,student[i].borrowbook);
n=n+1;//读一次就在统计上加一
}
fclose(fp);
printf("目前共有%d本书借出\n返回三级菜单\n",n);
getche();
return0;
}
3、卡号统计函数功能:
在被调用时,将在此图书馆办理借阅卡统计起来,当增加或删除卡时,能改变此统计结果;(此函数无参数,所以无参数说明和函数调用关系)
cardcount()//卡号统计
{
system("cls");//清屏
FILE*fp;
inti,n=0;
printf("\n\t\t\t卡号统计\n\n");//进入卡号统计界面
fp=fopen("card.txt","r");//将文件card.txt以读的方式打开
for(i=0;fread(&card[i],sizeof(structcard),1,fp)!
=0;i++)
{
printf("第%d张卡\n",i+1);
printf("\t卡号\t\t性别\t\t姓名\t\t班级\n");
printf("\t\t\n");
printf("\t%d\t\t%s\t\t%s\t\t%d\n",card[i].cardnum,card[i].sex,card[i].studentname,card[i].studentclass);
n=n+1;//读一次就在统计上加一
}
fclose(fp);
printf("\n目前共有%d个学生\n按任意键返回三级菜单\n",n);
getche();
}
4、删除图书函数功能:
在被调用时,将图书库里需要删除的书籍删除,不需考虑其是
借出(此函数无参数,所以无参数说明和函数调用关系)
delbook()//删除图书
{
system("cls");
FILE*fp,*fp2;
inti;
charbookname[10],choice;
printf("\n\t\t\t删除图书\n\n");//进入删除图书界面
fp=fopen("book.txt","r");//将文件book.txt以读的方式打开
fp2=fopen("book1.txt","w");//将文件book1.txt以写的方式打开printf("\t书名:
\n\t");
scanf("%s",bookname);
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i++)
{
if(strcmp(bookname,book[i].bookname)!
=0)
//通过比较,在图书库里寻找所删除的图书
{
fwrite(&book[i],sizeof(structbook),1,fp2);
//将非删除的所有书写到book1.txt
}
}
fclose(fp);
fclose(fp2);
printf("\t确认删除(y/n)?
\n\t");
getchar();
scanf("%c",&choice);
if(choice=='y'||choice=='Y')
{
fp=fopen("book.txt","w");
fp2=fopen("book1.txt","r");
for(i=0;fread(&book[i],sizeof(structbook),1,fp2)!
=0;i++)
{
fwrite(&book[i],sizeof(structbook),1,fp);
//将book1.txt里数据写到book.txt
}
fclose(fp);
fclose(fp2);
fp2=fopen("book1.txt","w");
fclose(fp2);//清空临时文件book1.txt
printf("\t删除成功,按任意键返回三级菜单……\n");
getchar();
return0;
}
else
{
printf("\t按任意键返回……\n");
getche();
return0;
}
}
5、删除卡号函数功能:
在被调用时,将卡号库里面需要删除的卡号删除;(此函数无参数,所以无参数说明和函数调用关系)
delcard()//删除卡号
{
system("cls");
FILE*fp,*fp2;
inti;
intcardnum;
charchoice;
printf("\n\t\t\t删除卡号\n\n");//进入删除卡号界面
fp=fopen("card.txt","r");
fp2=fopen("book1.txt","w");
printf("\t要删除的卡号(不存在则不作改动):
\n\t");
scanf("%d",&cardnum);
for(i=0;fread(&card[i],sizeof(structcard),1,fp)!
=0;i++)
{
if(card[i].cardnum!
=cardnum)
{//通过比较,在卡号库里寻找所删除的卡号
fwrite(&card[i],sizeof(structcard),1,fp2);
}//将非删除的卡号写到book1.txt
}
fclose(fp);
fclose(fp2);
printf("\t确认删除?
(Y/N)!
\n\t");
getchar();
scanf("%c",&choice);
if(choice=='y'||choice=='Y')
{
fp=fopen("card.txt","w");
fp2=fopen("book1.txt","r");
for(i=0;fread(&card[i],sizeof(structcard),1,fp2)!
=-0;i++)
{
fwrite(&card[i],sizeof(structcard),1,fp);
}//将book1.txt里数据写到card.txt
fclose(fp);
fclose(fp2);
fp2=fopen("book1.txt","w");
fclose(fp2);//清空临时文件book1.txt
printf("\t删除成功,返回三级菜单……\n");
getchar();
return0;
}
else
{
getchar();
printf("\t操作已取消!
\n按任意键返回……\n");
getche();
return0;
}
}
6、修改图书函数功能:
在其被调用时,将需修改的图书基本信息进行修改,分为对图书序号、图书名、作者及单价的修改;(此函数无参数,所以无参数说明和函数调用关系)
changebook()//修改图书
{
system("cls");
FILE*fp,*fp2;
charbookname[10],choice;
inti;
printf("\n\t\t\t修改图书\n\n");//进入修改图书界面
fp=fopen("book.txt","r");
fp2=fopen("book1.txt","w");
printf("\t书名:
\n\t");//输出需修改的书名
scanf("%s",bookname);
getchar();
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i++)
{
if(strcmp(book[i].bookname,bookname)==0)//寻找所需修改的图书
{
printf("\t你所要修改的书的资料如下,请选择你要修改的内容:
\n");
printf("\t序号\t\t书名\t\t作者\t\t单价\n");printf("\t%d\t\t%s\t\t%s\t\t%d\n",book[i].booknum,book[i].bookname,book[i].bookauthor,book[i].bookprice);
printf("\n\t1:
修改书号:
\n");
printf("\t2:
修改书名:
\n");
printf("\t3:
修改作者:
\n");
printf("\t4:
修改单价:
\n");
printf("\t请输入-4:
\n\t");
choice=getchar();
switch(choice)//选择1-4的不同修改项
{
case'1':
{
printf("\t新的书号:
\n\t");
scanf("%d",&book[i].booknum);
fwrite(&book[i],sizeof(structbook),1,fp2);
}break;
case'2':
{
printf("\t新的书名:
\n\t");
scanf("%s",book[i].bookname);
fwrite(&book[i],sizeof(structbook),1,fp2);
}break;
case'3':
{
printf("\t新的作者:
\n\t");
scanf("%s",book[i].bookauthor);
fwrite(&book[i],sizeof(structbook),1,fp2);
}break;
case'4':
{
printf("\t新的单价:
\n\t");
scanf("%d",&book[i].bookprice);
fwrite(&book[i],sizeof(structbook),1,fp2);
}break;
default:
printf("\t没有这样的操作!
");break;
}
getchar();
continue;
}
fwrite(&book[i],sizeof(structbook),1,fp2);
//将修改后的图书信息写入book1.txt
}
fclose(fp);
fclose(fp2);
fp=fopen("book.txt","w");
fp2=fopen("book1.txt","r");
{
for(i=0;fread(&book[i],sizeof(structbook),1,fp2)!
=0;i++)
{
fwrite(&book[i],sizeof(structbook),1,fp);
//将book1.txt数据写入book.txt
}
printf("\t修改成功,按任意键返回二级菜单\n");
getche();
}
fclose(fp);
fp2=fopen("book1.txt","w");//将临时文件清空
fclose(fp2);
}
五、运行结果及分析
1、调用借阅统计函数时的运行结果
2、调用卡号统计函数时的运行结果
3、调用删除图书函数时的运行结果
4、调用删除卡号函数时的运行结果
5、调用修改图书函数时的运行结果
六、调试与测试
调试就是利用软件的功能将程序的每一步按照流程走一次,如果出现问题就能很直接,很精确地找出问题的所在,从而更好地解决问题。
调试方法:
将断点设在需检测的程序语句的首段,特别是要在关键、易出错的地方;然后开始调试,按照要求一步一步的进行,遇到停止的地方说明此处有问题,还可以在watch里面输入你要观察的变量这样就更直接的观察程序是怎样运行的,看是不是按照自己的程序思想在进行。
测试结果的分析:
在运行测试某段程序时,如果程序一直按照编译者的初衷来运行,并且没有“卡壳”,说明测试结果理想;否则,就是程序出现问题,就得分析原因,找出症结所在,在不断的更改讨论和调试运行中,得出最好的解决方案。
在此,我调试了一下删除图书函数与主函数的连接及调用函数运行的过程:
1、调用删除函数drlbook()之前在主函数里
2、调用此函数即转到此函数当中
3、在此函数里面正常运行
在此次我负责的程序段中,我是首先运行是否有错,功能是否实现,最后才进行调试,并且调试的结果是理想的,所以没有在调试中遇到问题。
七、课程设计心得及体会
本次课程设计经历地十分辛苦,想必都有这个体会(老师也不例外),这就是我们在上半学期没有更好地学习C语言知识,同时也没有接触课外有关于C语言方面的知识,才导致我们一下碰到这么复杂,从没接触过的课设(对于我们而言);但是也就是因为这种情况,我才意识到自己这方面的知识太薄弱了,什么事、知识都不能一味地考老师来教,自己得有自觉学习的能力和习惯。
在编程的一个多星期里,以小组为单位的我们表现了团队的力量,分工明确,虽然途中遇到过很多困难,我们依然坚定地解决了,最后完成了设计。
再说一下我自己在这个过程当中的体会:
编程的过程使我了解到我还有好多东西没有掌握,或者没有接触到的知识点,但是也通过自己的自学、请教老师、同学,学到了不少东西,例如:
在编程方面对结构体的理解与运用,熟练运用文件,学会怎样去调试某段程序使之运行得当;在计算机方面,学会了好多有关计算机方面的知识……
总结:
本次课程设计虽然“历经磨难”,但也“硕果累累”,不仅是一个挑战,更是一个提醒,提醒我大学应该做什么,怎样学习才更有效,将来步入社会,将何去何从等等一系列“有营养”的话题。
最后,我还期待着下一个课程设计会给我带来什么“营养”,我将拭目以待……
八、源程序清单和执行结果:
#include
#include
#include
#include
#include
structstudent//学生借阅信息结构体
{
intcardnum;//卡号
charborrowbook[10];//借阅图书
}student[100];
structbook//图书相关信息结构体
{
intbooknum;//图书序号
charbookname[20];//图书名
intbookprice;//图书单价
charbookauthor[20];//图书作者
intstatus;//图书状态
}book[100];
structcard//借阅卡信息结构体
{
intcardnum;//卡号
charsex[4];//性别
charstudentname[20];//学生姓名
intstudentclass;//学生班级
}card[100];
search_by_name()//按图书名查阅
{
FILE*fp;
charbookname[10];
inti,flag=0;
fp=fopen("book.txt","r");
printf("\t请输入你要查找的书名:
\n\t");
scanf("%s",bookname);
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i++)
{
//将book.txt内容读到图书数组
if(strcmp(bookname,book[i].bookname)==0)
{//通过比较,在图书库里查询要找的书
flag=1;
if(book[i].status==1)
{
//当图书存在status==1输出相关信息
fclose(fp);
printf("\t书号\t\t书名\t\t作者\t\t单价\n\t%d\t\t%s\t\t%s\t\t%d\n",book[i].booknum,book[i].bookname,book[i].bookauthor,book[i].bookprice);
printf("\t此书无人借阅\n");//status==1
}
else
{
printf("\t这本书已经有人借出\n");//status==0
fclose(fp);
return0;
}
}
}
if(flag==0)
{
printf("\t没有你要查询的书籍!
\n");
fclose(fp);
}
return0;
}
search_by_author()//按作者名查阅
{
FILE*fp;
charbookauthor[10];
inti,flag;
fp=fopen("book.txt","r");
printf("\t请输入你要查找的作者名:
\n\t");
scanf("%s",bookauthor);
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i++)
{
//将book.txt内容读到图书数组
if(strcmp(bookauthor,book[i].bookauthor)==0)
{
//通过比较,在图书库里查询要找的书
flag=1;
if(book[i].status==1)//当图书存在status==1输出相关信息
{
fclose(fp);
printf("\t书号\t\t书名\t\t作者\t\t单价\n\t%d\t\t%s\t\t%s\t\t%d\n",book[i].booknum,book[i].bookname,book[i].bookauthor,book[i]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言课程设计 秦思军 语言 课程设计