C语言程序设计基础课程设计.docx
《C语言程序设计基础课程设计.docx》由会员分享,可在线阅读,更多相关《C语言程序设计基础课程设计.docx(32页珍藏版)》请在冰点文库上搜索。
C语言程序设计基础课程设计
武汉工商学院
信息工程学院
项目名称:
图书信息管理系统
学生姓名:
袁智琴
学号:
15401023
班级:
15计科实验班
指导教师:
胡成松
2016年3月23日
1.实验的目的和意义
1.1目的
随着人们生活水平的日益提高,人们对文化的需求也越来越大。
在人们的业余生活中,越来越多的人乐于享受文字给生活带来的乐趣。
而图书也是学生的学习过程中必不可少的。
而本项目旨在研发一个图书馆的管理系统,实现图书馆的信息化管理。
在方便读者查询借阅图书的同时,方便图书管理员对图书进行管理。
对于用户来说,操作简便易行,本系统提供了按照isbn,书名,作者,出版单位,出版年份,价格6种方式的查询书目操作。
本系统提供添加书目,删除书目,编辑书目信息等操作,方便后台管理员对所有图书进行管理。
1.2意义
随着社会的发展,传统的图书管理方式已不再符合现代社会需求,相比传统繁琐复杂的图书借出与还入方式,用简单的C语言程序代码编写的图书管理系统就可以更简单的实现图书信息录入,修改,删除,查询和浏览以及保存等功能,让用户使用是更易上手,使得复杂且大量的图书管理操作更容易使用。
2.系统功能的描述
图书管理系统具有图书信息的录入保存,信息导入,浏览,查询和图书信息的排序,删除等功能。
2.1实验功能设计
图书信息管理系统开发
图书信息包括:
书名、作者名、ISBN号、出版单位、出版年份、价格等。
试设计一个图书信息管理系统,使之能提供以下功能:
(1)系统以菜单方式工作;
(2)图书信息录入功能(图书信息用文件保存);
(3)图书信息浏览功能;
(4)查询和排序功能:
(至少一种查询方式)
1)按书名查询;
2)按作者名查询;
3)按出版社查询;
4)按出版年份查询。
(5)修改图书信息:
对某图书信息进行修改
(6)删除图书:
将某图书的信息删除
(7)退出
根据题目所给问题,要求所编程序要实现以下功能:
图书信息录入模块的实现;
系统中文件的保存和读写功能的实现;
图书信息的浏览;
图书信息的查询。
分为按图书书名查询,按作者名查询,按isbn编号查询以及按出版单位查询。
图书信息按年份排序,修改的功能。
对某本图书的删除功能以及退出功能。
系统菜单的的设计。
对程序的设计和检测的功能。
2.2实验功能描述
程序运行以后就会显示菜单界面:
图书管理系统:
1.图书信息录入2.图书信息浏览3.图书信息查询4.图书信息排序5.修改图书信息6.删除图书7.退出系统
如下是功能模块:
图2-1功能模块图
(1)图书信息录入进入系统后会显示菜单界面,选择图书信息录入功能后会出现请输入需要录入信息的图书数量,从键盘输入需录入信息的图书数量后就开始录入图书信息,录入结束后会自动保存入已创建的文件里,然后会出现提示:
返回主菜单请选择1,退出请选择0,根据提示选择退出系统或返回主菜单。
(2)图书信息浏览功能进入系统后会显示菜单界面,根据菜单选择2图书信息浏览功能,然后就会依次显示出图书的书名,作者名,isbn编号,出版单位,出版年份和图书价格,若先前已经录入过图书信息则会依次显示出图书信息,若未录入过则会显示空白,结束后会出现返回主菜单或退出选项,根据提示进行退出或返回主菜单操作。
(3)图书信息查询功能进入主菜单后选择3信息查询功能,然后界面上会显示查询方式:
1按书名查询2按作者名查询3按isbn编号查询4按出版单位查询,根据选项选择查询方式。
若已找到此图书就会显示此图书的书名,作者名,isbn编号,出版单位,出版年份和价格;若未找到此图书,界面会显示未找到此图书的相关信息。
若要继续修改请按‘y’否则请按‘n’。
结束后会显示返回主菜单和退出系统选项,根据选项进行退出或返回主菜单操作。
(4)图书排序功能进入主菜单后选择4图书信息排序功能,菜单界面显示排序方式(从小到大):
1按作者名排序2按isbn编号查询3按出版年份查询,选择排序方式后开始排序操作,完成后显示出排序后所有的图书信息。
结束后会显示返回主菜单和退出系统选项,根据选项进行退出或返回主菜单操作。
(5)修改图书信息功能进入主菜单后选择5图书信息修改功能,菜单界面会显示“请输入你要修改的图书的书名或isbn编号”,若在已录入的图书信息中找到此图书,则会显示“已找到此图书的相关信息!
”,若未找到则会显示“未找到此书的相关信息!
”然后显示此书的书名,作者名,isbn编号,出版单位,出版年份,价格信息。
在完成此操作后界面会显示出一个选项菜单,根据选项选择需要修改的图书信息后根据提示输入修改后的图书信息,在完成修改后,会输出修改后的全部的图书信息。
若要继续修改请按y,结束修改请按n.结束后根据提示选择返回主菜单或者退出。
(6)删除图书功能进入主菜单候选择6删除图书功能,运行界面会显示出删除前已录入的所有图书信息,根据提示输入需要被删除的图书书名,若找到此图书则显示已找到此书的相关信息并输出其所有信息,若未找到则显示未找到此书的相关信息。
完成删除操作后,显示出删除后所有图书信息。
结束后根据提示选择退出系统或返回主菜单。
添加图书信息功能进入主菜单后选择信息添加功能,然后输入需要添加信息的图书数量,选择后依次输入图书的信息。
结束后若要继续添加请按‘y’,否则请按‘n’。
结束后若要返回主菜单请按‘y’,退出系统请按任意键。
(7)退出系统功能选择退出系统后,运行界面显示出“谢谢使用!
”后退出系统。
3.系统存储结构设计与描述
1)系统需要存储的信息包含图书书名、图书作者名、isbn编号、出版单位、出版年份、图书价格,其中图书书名、图书作者名、isbn编号、出版单位信息均使用字符数组类型存放,出版年份信息使用int类型存放,图书价格信息使用float类型存放;
2)系统设计的结构体定义如下:
structbook
{
charshuming[20];//图书书名
charname[20];//图书作者名
charisbn[20];//图书isbn编号
charchubandanwei[20];//出版单位
intyear;//出版年份
floatprize;//图书价格
}stu[M];
系统定义了一个M,己可录入的最大的信息量。
#defineM10000
3)保存函数save()将已录入的所有图书信息从内存保存到硬盘中保存在book.txt文本里。
for(i=0;ifwrite(&stu[i],sizeof(structbook),1,fp);
fclose(fp);
4)导入函数load()将图书信息从硬盘导入到内存中以进行其他操作。
while(!
feof(fp))
{
fread(&stu[i],sizeof(structbook),1,fp);
i++;
}
fclose(fp);
N=(i-1);
4.系统功能实现与算法描述
4.1信息查询功能
运用for循环,若找到此书的相关信息就显示已经在到相关图书并输出该图书的相关信息,若未找到就能继续查找直到循环结束,若循环结束后还未找到相关图书就显示未找到相关图书。
结束后选择是否继续修改。
图4-1查询流程图
4.2信息排序功能
定义一个结构体中间变量,用冒泡排序两层for循环,第二层循环内加if判断语句,若顺序相反(从小到大排序)就进行变量之间的交换。
图4-2排序流程图
4.3图书信息删除功能
先查找要删除的图书信息,若找到后选择是否进行删除操作,若进行删除操作就用后一本图书的信息覆盖前一本图书信息,若不进行删除就退出,若未找到也退出程序。
图4-3删除流程图
4.4图书信息修改功能
先找到要修改的图书信息,然后选择要修改的图书信息类型,修改后进行保存,若要继续修改就按Y否则就按N结束。
图4-4修改流程图
5.系统性能测试
5.1菜单函数的功能测试
进入系统后显示菜单。
图5-1菜单功能测试图
5.2录入函数的功能测试
显示菜单后选择1图书信息录入功能,输入需要录入信息的图书数量,然后进行图书信息的录入。
如图5-2所示
图5-2录入功能测试图
5.3浏览函数的功能测试
显示菜单后选则2图书信息浏览功能,输出先前已经录入的图书信息。
图5-3浏览功能测试图
5.4查询函数的功能测试
显示菜单后选择图书信息查询功能,然后在四种查询方式中任选一种方式并输入序号,然后输入与序号对应的要查询的图书信息,若找到此图书会显示已找到此图书并输出该图书的相关信息,若未找到提示输入错误。
结束后若要继续查询请按‘y’,否则请按‘n’。
如图5-4-1示找到图书信息。
图5-4查询功能测试图
如图5-5示若输入错误则显示未找到相关书籍。
图5-5查询错误提示
5.5排序函数的功能测试
显示菜单后选择图书信息排序功能。
然后在按作者名排序,按isbn编号排序,按出版年份排序这三种排序方式中任选一种,然后输出排序后的所有图书信息(按从小到大的顺序)。
图5-6排序功能测试图
5.6修改函数的功能实现
显示菜单后选择图书信息修改功能,输入你要修改的图书的书名或isbn编号,若找到此书则显示已找到此书的相关信息并输出该图书的所有信息,否则则显示未找到此术的相关信息!
然后选择修改图书信息的类型,在输入修改后的图书信息,修改完成后输出所有的图书信息。
若要继续修改请按‘y’,结束修改请按‘n’。
如图所示
图5-7修改功能测试图
5.7删除函数的功能测试
显示菜单后选择图书信息删除功能,输出删除前所有的图书信息,然后输入需要删除信息的图书书名,若找到此书则显示已找到此书的相关信息,否则就显示未找到。
若确认删除就按Y否则就按N,删除完成后显示删除后所有的图书信息!
如图5-7-1所示
图5-8删除功能测试图
若输入错误则会提示,输入有误。
如下图所示
图5-9删除错误提示
5.8添加图书信息功能测试
显示菜单后选择图书信息添加功能,输入需要添加信息的图书数量,然后依次添加入信息。
如下图所示
图5—10信息添加功能测试
5.9结束函数的功能测试
显示菜单后选择退出功能,显示“谢谢使用!
”。
图5-10修改功能测试图
6.设计小结
用c语言编写的图书管理系统实现了图书信息的录入保存,导入浏览,查询,排序,删除,修改等功能,是图书管理操作的方便快捷化,是复杂的工作变得简单。
在编写图书管理系统代码的过程中,我遇到了很多问题:
1保存和导入函数的运用上存在很多问题,首先是对保存和导入函数的用法和理解含糊不清,其次就对何时需要调用保存和导入函数不太清楚。
在查阅一些书籍和案例后,清楚了如何使用保存和导入函数。
2对结构体变量定义和结构体之间的信息交换不太熟悉,例如在对图书信息进行排序的过程中需要对整个结构体的信息进行交换,需定义一个新的有相同结的构体类型名的结构体变量才能进行结构体信息之间的交换。
且交换的顺序十分重要。
在请教老师后和查阅相关书籍后,加深了我对结构体的认识和理解。
3对于一些细节上的问题不够细心。
例如一条语句后的分号,定义的变量类型,变量的使用,函数调用中实参和形参的类型等。
通过一次又一次对程序的测试,最后解决了这些细节上的问题。
这次的课程设计巩固了我对c语言课程学习,加深了我对一些程序算法的理解。
并认识到程序设计并不只是对程序代码设计能力的检测,更是对程序报告编写能力考验。
致谢
本次的课程设计实验中我遇到很到问题,不管是细节问题还是一些算法问题都让我耗费了一定的时间。
在解决问题的过程中,周围的老师和同学都给与了我很大的帮助。
通过老师和同学的指导和帮助一些知识点薄弱的地方都得到了加强。
非常感谢老师和同学的帮助,让我能够准确完成课程设计报告。
通过这次课程设计实验我了解到团队合作的重要性,不论是在以后的学习中还是将来的工作中我都会谨记图解合作和不耻下问的重要性。
参考文献
[1]胡成松,黄玉兰,李文红.C语言程序设计[M].北京:
机械工业出版社,2015.8
[2]周红,苏晓光.C语言程序设计实用教程[M].北京:
人民邮电出版社,2013.11
[3]王新,孙雷.C语言课程设计[M].北京:
清华大学出版社,2016:
142-147
附录
#include
#include
#include
intmean();
voidsave(int);
voidload();
voidinput();
voidlook();
voidsearch();
voidpaixu();
voidxiugai();
voidshuming1(charch[20]);
voidname1(charch[20]);
voidisbn1(charch[20]);
voidcbdw(charch[20]);
voidyear1(inta);
voidprize1(floata);
voidback();
voidadd();
voidxuanxiang();
#defineM10000
intN=0;
structbook
{
charshuming[20];//图书书名
charname[20];//图书作者名
charisbn[20];//图书isbn编号
charchubandanwei[20];//出版单位
intyear;//出版年份
floatprize;//图书价格
}stu[M];
intmean()
{
intchoose;
printf("-------------------图书管理系统--------------------------------------------\n");
printf("===========================================================================\n");
printf("\t
(1)图书信息录入\n");
printf("\t
(2)图书信息浏览\n");
printf("\t(3)图书信息查询\n");
printf("\t(4)图书信息排序\n");
printf("\t(5)修改图书信息\n");
printf("\t(6)删除图书信息\n");
printf("\t(7)添加图书信息\n");
printf("\t(8)退出程序\n");
printf("============================================================================\n");
printf("请输入你的选择:
\t");
scanf("%d",&choose);
printf("\n");
returnchoose;
}
voidsave(intN)
{
FILE*fp;
inti;
if((fp=fopen("book.txt","wb"))==NULL)
{
printf("cannotopenfile\n");
return;
}
for(i=0;ifwrite(&stu[i],sizeof(structbook),1,fp);
fclose(fp);
}
voidload()
{
FILE*fp;
inti=0;
if((fp=fopen("book.txt","rb"))==NULL)
{
printf("cannotopeninfile\n");
exit(0);
}
while(!
feof(fp))
{
fread(&stu[i],sizeof(structbook),1,fp);
i++;
}
fclose(fp);
N=(i-1);
}
voidinput()
{
inti;
printf("请输入需要录入信息的图书数量:
\t");
scanf("%d",&N);
printf("\n");
for(i=0;i{
printf("请输入第%d本图书的书名:
",i+1);
scanf("%s",stu[i].shuming);
printf("请输入第%d本图书的作者名:
",i+1);
scanf("%s",stu[i].name);
printf("请输入第%d本图书的isbn编号:
",i+1);
scanf("%s",&stu[i].isbn);
printf("请输入第%d本图书的出版单位:
",i+1);
scanf("%s",stu[i].chubandanwei);
printf("请输入第%d本图书的出版年份:
",i+1);
scanf("%d",&stu[i].year);
printf("请输入第%d本图书的价格:
",i+1);
scanf("%f",&stu[i].prize);
printf("\n");
}
save(N);
}
voidlook()
{
inti;
load();
printf("书名\t作者名\tisbn编号\t出版单位\t出版年份\t价格\n");
for(i=0;i{
printf("%s\t%s\t%s\t\t%s\t\t%d\t\t%.2f\n",stu[i].shuming,stu[i].name,stu[i].isbn,stu[i].chubandanwei,stu[i].year,stu[i].prize);
}
}
voidsearch()
{
inti,a,flog=0;
printf("查询方式:
\n\t1.按书名查询\t\t2.按作者名查询\n\t3.按isbn编号查询\t4.按出版单位查询\n");
printf("\n请输入查询方式:
");
scanf("%d",&a);
switch(a)
{
case1:
charch1[20];
printf("请输入需要查找的书名:
");
scanf("%s",ch1);
printf("\n");
load();
for(i=0;iif(strcmp(stu[i].shuming,ch1)==0)
{
printf("已找到相关图书!
\n");
printf("书名\t作者名\tisbn编号\t出版单位\t出版年份\t价格\n");
printf("%s\t%s\t%s\t\t%s\t\t%d\t\t%.2f\n",stu[i].shuming,stu[i].name,stu[i].isbn,stu[i].chubandanwei,stu[i].year,stu[i].prize);
flog=1;
}
break;
case2:
charch2[20];
printf("请输入需要查找的作者名:
");
scanf("%s",ch2);
printf("\n");
load();
for(i=0;iif(strcmp(stu[i].name,ch2)==0)
{
printf("已找到相关图书!
\n");
printf("\n书名\t作者名\tisbn编号\t出版单位\t出版年份\t价格\n");
printf("%s\t%s\t%s\t\t%s\t%d\t\t%.2f\n",stu[i].shuming,stu[i].name,stu[i].isbn,stu[i].chubandanwei,stu[i].year,stu[i].prize);
flog=1;
}
break;
case3:
charch3[20];
printf("请输入需要查找的isbn编号:
");
scanf("%s",ch3);
printf("\n");
load();
for(i=0;iif(strcmp(stu[i].isbn,ch3)==0)
{
printf("已找到相关图书!
\n");
printf("\n书名\t作者名\tisbn编号\t出版单位\t出版年份\t价格\n");
printf("%s\t%s\t%s\t\t%s\t%d\t\t%.2f\n",stu[i].shuming,stu[i].name,stu[i].isbn,stu[i].chubandanwei,stu[i].year,stu[i].prize);
flog=1;
}
break;
case4:
charch4[20];
printf("请输入需要查找的出版单位:
");
scanf("%s",ch4);
printf("\n");
load();
for(i=0;iif(strcmp(stu[i].chubandanwei,ch4)==0)
{
printf("已找到相关图书!
\n");
printf("\n书名\t作者名\tisbn编号\t出版单位\t出版年份\t价格\n");
printf("%s\t%s\t%s\t\t%s\t%d\t\t%.2f\n",stu[i].shuming,stu[i].name,stu[i].isbn,stu[i].chubandanwei,stu[i].year,stu[i].prize);
flog=1;
}
break;
}
if(flog==0)
printf("未找到该作者的相关图书!
\n");
}
voidpaixu()
{
inti,j,n;
structbooktemp;//temp为结构体变量
printf("\n排序方式(从小到大):
\n\t1.按作者名排序2.按isbn编号排序3.按出版年份排序\n");
printf("\n请输入你的选择:
");
scanf("%d",&n);
switch(n)
{
case1:
load();
for(i=0;ifor(j=0;jif(strcmp(stu[j].name,stu[j+1].name)>0)
{
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
printf("排序后的所有图书信息为:
\n");
for(i=0;iprintf("%s\t%s\t%s\t\t%s\t%d\t\t%.2f\n",stu[i].shuming,stu[i].name,stu[i].isbn,stu[i].chubandanwei,stu[i].