资源描述
课程设计报告
题 目:图书信息管理系统
目 录
一、设计任务书…………………………………………………………3
二、本组课题及本人任务………………………………………………3
三、程序功能简介………………………………………………………3
四、主体内容……………………………………………………………3
1.设计分析………………………………………………………………………3
2.程序结构………………………………………………………………………4
3.各模块的功能及程序说明……………………………………………………5
4. 源程序………………………………………………………………………5
5.操作方法…………………………………………………………………….16
6.试验结果……………………………………………………………………16
7.设计体会…………………………………………………………………….
五、附录………………………………………………………………20
1.流程图………………………………………………………………………20
2.过程列表……………………………………………………………………24
一、设计任务书
1.目的
1)复习、巩固C语言的基础知识,进一步加深对C语言的理解和掌握。
2)课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。
3)培养学生在项目开发中团队合作精神、创新意识及能力。
2.要求:
1、对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理。
2、系统设计要实用,编程简练,可用,功能全面。
3、说明书、流程图要清楚。
4、记录设计情况(备查,也为编写设计说明书作好准备)。
5、要求采用模块化程序设计方法,及锯齿型书写格式,要求上机调试通过和按设计报告格式。
6、设计上交内容:设计报告一份(按格式书写);源程序一份,能编译成可执行文件并能正常运行。
二、本组课题及本人任务
课题:图书信息管理系统设计
图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。试设计一图书信息管理系统,使之能提供以下功能:
1.系统以菜单方式工作。
2.图书信息录入功能(图书信息用文件保存)--输入。
3.图书信息浏览功能--输出。
4.查询和排序功能:(至少一种查询方式)--算法。
a. 按书名查。
b.按作者名查询。
本人任务:负责设计和编写图书信息管理系统的修改图书信息部分。
三、程序功能简介
本系统是以visual C++ 6.0 环境下用C语言开发的一个图书管理系统。本系统具有图书信息录入、浏览、删除、修改、查找(包括按书名、作者查找)功能。其中图书信息包括登录号、书名、作者名、分类号、出版单位、出版时间、价格,并且对信息以文件形式储存。另外本系统具备实用性的同时代码逻辑谨慎清晰易懂,且界面美观。
四、主体内容
1.设计分析
本系统共分为一个主页面模块(主函数部分),五个功能模块(功能函数)分别为图书信息录入、图书信息浏览、图书信息查询、图书信息删除、图书信息修改。设计时应该先写好主函数、定义好全局变量和功能函数,再对五个功能函数进行设计。在每个功能函数和主函数应中加入控制条件使用户可以随时退出系统,并在用户输入指令错误的时候给予提醒和退出选项。小组中的五个人分别承担一个功能模块进行设计。并在每个人设计完成后通过主函数进行链接调试正确后方为完成。
2.程序结构(流程图)
系统运行
选择功能
1.信息录入
键入信息
2.信息浏览
返回主菜单
返回主菜单
3.信息查询
按书名查找
按作者查找
返回主菜单
输入书名
输入作者
信息存在?
是
否
输出信息
返回主菜单
4.信息删除
输入删出信息代号
输出删除后的信息
返回主菜单
5.信息修改
输入修改信息代号
修改信息存在?
是
信息修改
否
返回主菜单
输出修改后的信息
6.退出系统
3.各模块的功能及程序说明
A、录入模块:本模块主要执行信息录入功能。
信息录入是为了把新来的图书进行进库操作,也就是将新到来的图书的信息放入数据库当中,方便图书管理员的管理和操作,帮助图书管理员更好的管理图书的进库出库的情况,录入模块主要是方便了图书管理员对于图书的更好的管理,有助于挺高图书管理员的工作效率。
B、浏览模块:本模块主要是执行把已有信息输出浏览功能。
该模块的主要作用是为了对于所有图书信息的浏览,全方位的操作和宏观上的管理,对于图书馆已有的图书可以有一个宏观上的认识,是图书管理员做到了心中有数,在总体上把握图书的所有信息,方便以后的查询、删除和修改。浏览模块对于增强图书管理员的宏观把握提供了一个有效的途径和方法,是图书馆里系统的关键所在。
C、查询模块:本模块主要是执行按书名和按作者名查找图书信息的功能。众所周知,如果图书管理员想找到某本图书或者是读者希望找到某本图书,应该对其进行查询操作,查询功能是图书管理系统的关键一环,如果没有查询功能,该图书管理系统就是一个欠缺的甚至不完整的系统,查询系统不仅方便了图书管理人员而且方便了读者对于查询图书的有效性和连贯性。
D、删除模块:本模块主要执行删除图书信息的功能。
删除模块是图书管理系统的重中之重,删除模块的功能是为了当图书馆发生某种意外因素或者是对图书进行了更新,造成了某种图书的丢失或缺少,所以在此基础上要对于图书数据的更新和图书信息的重新整理,删除模块是对于图书管理系统的补充,是图书管理系统的“增、删、改、查”的功能更加的完善,因此上来说,删除模块也是图书管理系统最重要的和最关键的一环。
E、修改模块(本人设计模块):本模块主要执行图书信息修改功能。在用户选择该功能后。首先,系统会弹出已存在信息列表并让用户选择所要修改的信息项目。然后,当用户选定要修改的信息后会弹出信息目录,用户需按顺序依次修改信息内容。最好当所有信息项目都修改完成之后,按回车键会在窗口上输出修改后的内容。
4. 源程序
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#define MAX 100
struct Student
{
int num;/*登录号*/
char name[100];/*书名*/
char author[100];/*作者名*/
char fn[100];/*分类号*/
char place[100];/*出版单位*/
char day[100];/*出版时间*/
float money;/*价格*/
}stu[MAX];
main()/*主函数*/
{
void Input();/*输入*/
void Display();/*输出*/
void Find();/*查找*/
void Modify();/*删除*/
void Change();/*修改*/
int n;
for(;;)
{
printf("\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※ ※\n");
printf("※ 欢迎来到图书信息管理系统 ※\n");
printf("※ ※\n");
printf("※ ※\n");
printf("※ 主菜单 ※\n");
printf("※ ※\n");
printf("※ ▲1.图书信息录入 ▲ ※\n");
printf("※ ※\n");
printf("※ ▲2.图书信息浏览 ▲ ※\n");
printf("※ ※\n");
printf("※ ▲3.图书信息查询 ▲ ※\n");
printf("※ ※\n");
printf("※ ▲4.图书信息删除 ▲ ※\n");
printf("※ ※\n");
printf("※ ▲5.图书信息修改 ▲ ※\n");
printf("※ ※\n");
printf("※ ▲6.退出系统 ▲ ※\n");
printf("※ ※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n");
printf("请输入选择项(1-6):");
scanf("%d",&n);
printf("\n\n\n\n");
if(n>0&&n<7)
{
switch(n)
{
case 1:Input();break;
case 2:Display();break;
case 3:Find();break;
case 4:Modify();break;
case 5:Change();break;
case 6:printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※ ※\n");
printf("※ 谢谢使用! ※\n");
printf("※ 再见! ※\n");
printf("※ ※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
exit(0);
}
}
else
{
printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※ ※\n");
printf("※ 输入错误! ※\n");
printf("※ 请退出! ※\n");
printf("※ ※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
break;
}
}
}
void Find()/*查找*/
{
FILE *fp;
int i;
int choose,t;
char ans[100];
do
{
printf("1.按书名查找\n");
printf("2.按作者名查找\n");
printf("返回主菜单(其他数字)\n");
scanf("%d",&choose);
if(choose==1)
{
printf("输入所查书名:\n");
scanf("%s",ans);
t=-1;
if(choose==1)
{
for(i=0;i<MAX;i++) if(strcmp(ans,stu[i].name)==0)
{
t=i;
fp=fopen("student","rb");
for(i=0;fread(&stu[i],sizeof(struct Student),1,fp)==1;i++)
printf("%d %s %s %s %s %s %f\n",stu[t].num,stu[t].name,stu[t].author,stu[t].fn,stu[t].place,stu[t].day,stu[t].money);
}
}
if(t==-1) printf("不存在该信息\n");
}
else if(choose==2)
{
printf("输入所查作者名:\n");
scanf("%s",ans);
t=-1;
if(choose==2)
{
for(i=0;i<MAX;i++)
if(strcmp(ans,stu[i].author)==0)
{ t=i;
fp=fopen("student","rb");
for(i=0;fread(&stu[i],sizeof(struct Student),1,fp)==1;i++)
printf("%d %s %s %s %s %s %f\n",stu[t].num,stu[t].name,stu[t].author,stu[t].fn,stu[t].place,stu[t].day,stu[t].money);
}
}
if(t==-1) printf("不存在该信息\n");
}
else return;
}while(1);
}
void Display()/*输出*/
{
FILE *fp;
int i;
fp=fopen("student","rb");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 图书列表\n");
printf("-----------------------------------------------------------\n");
printf("登录号 书名 作者名 分类号 出版单位 出版时间 价格\n");
printf("-----------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct Student),1,fp)==1;i++)
{
printf("%6d %8s %8s %8s %8s %8s %8.2f\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);
}
fclose(fp);
}
void Input()/*输入*/
{
FILE *fp;
int n;
fp=fopen("student","ab+");
for(n=0;n<MAX;n++)
{
printf("n=%d 输入序号n(当输入n=-1时,返回),n=",n++);
scanf("%d",&n);
if(n==-1)
{
fclose(fp);
return;
}
else
{
printf("请输入登录号 书名 作者名 分类号 出版单位 出版时间 价格\n");
scanf("%d%s%s%s%s%s%f",&stu[n].num,stu[n].name,stu[n].author,stu[n].fn,stu[n].place,stu[n].day,&stu[n].money);
fwrite(&stu[n],sizeof(struct Student),1,fp);
}
}
fclose(fp);
}
void Modify()/*删除*/
{
FILE *fp;
int i,flag,n,s,j;
fp=fopen("student","rb+");
rewind(fp);
printf(" 图书列表\n");
printf("-----------------------------------------------------------\n");
printf("登录号 书名 作者名 分类号 出版单位 出版时间 价格\n");
printf("-----------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct Student),1,fp)==1;i++)
{
printf("%6d %8s %8s %8s %8s %8s %8.2f\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);
printf("\n");
}
n=i;
printf("输入待删除图书号:\n");
scanf("%d",&s);
for(i=0,flag=1;flag&&i<n;i++)
{
if(s==stu[i].num)
{
for(j=i;j<n-1;j++)
{
stu[j].num=stu[j+1].num;
strcpy(stu[j].name,stu[j+1].name);
strcpy(stu[j].author,stu[j+1].author);
strcpy(stu[j].fn,stu[j+1].fn);
strcpy(stu[j].place,stu[j+1].place);
strcpy(stu[j].day,stu[j+1].day);
stu[j].money=stu[j+1].money;
}
flag=0;
}
}
if(!flag)
n=n-1;
else
printf("没有此号\n");
fp=fopen("student","wb");
for(i=0;i<n;i++)
fwrite(&stu[i],sizeof(struct Student),1,fp);
fclose(fp);
fp=fopen("student","r");
printf(" 图书列表\n");
printf("-----------------------------------------------------------\n");
printf("登录号 书名 作者名 分类号 出版单位 出版时间 价格\n");
printf("-----------------------------------------------------------\n");
for(i=0;i<n;i++)
{
fread(&stu[i],sizeof(struct Student),1,fp);
printf("%6d %8s %8s %8s %8s %8s %8.2f\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);
printf("\n");
}
fclose(fp);
}
void Change()/*修改*/
{
FILE *fp;
int i,num,n;
int flag=0;
fp=fopen("student","rb");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 图书列表\n");
printf("-----------------------------------------------------------\n");
printf("登录号 书名 作者名 分类号 出版单位 出版时间 价格\n");
printf("-----------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct Student),1,fp)==1;i++)
{
printf("%6d %8s %8s %8s %8s %8s %8.2f\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);
}
fclose(fp);
printf("请输入要修改的图书号:");
scanf("%d",&num);
for(i=0;i<=MAX;i++)
if(stu[i].num==num)
{
printf(" 图书列表\n");
printf("-----------------------------------------------------------\n");
printf("登录号 书名 作者名 分类号 出版单位 出版时间 价格\n");
printf("-----------------------------------------------------------\n");
printf("%6d %8s %8s %8s %8s %8s %8.2f\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);
printf("-----------------------------------------------------------\n\n");
n=i;
flag=1;
break;
}
if(flag==0)
{
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 输入错误!\n");
printf(" 请返回!\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
return;
}
printf("\n\n\n");
fp=fopen("student","rb+");
fseek(fp,n*sizeof(struct Student),0);
printf("登录号 书名 作者名 分类号 出版单位 出版时间 价格\n");
scanf("%d%s%s%s%s%s%f",&stu[n].num,stu[n].name,stu[n].author,stu[n].fn,stu[n].place,stu[n].day,&stu[n].money);
fwrite(&stu[i],sizeof(struct Student),1,fp);
fclose(fp);
fp=fopen("student","rb");
printf(" 图书列表\n");
printf("-----------------------------------------------------------\n");
printf("登录号 书名 作者名 分类号 出版单位 出版时间 价格\n");
printf("-----------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct Student),1,fp)==1;i++)
{
printf("%6d %8s %8s %8s %8s %8s %8.2f\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);;
}
printf("-----------------------------------------------------------\n\n");
fclose(fp);
}
5.操作方法(流程)
第一步:双击打包好的.exe程序,打开程序。
第二步:根据窗口提示内容作出选择。
第三步:根据弹出的二级菜单作出选择。
第四步:根据所选内容进行相应的操作。
第五步:操作完毕,根据提示返回主菜单会直接退出该系统。
6.试验结果
A、图书信息录入:
数据输入:
数据输出:
B、图书信息浏览
输入数据:
数据输出:
C、图书信息查询
输入数据:
输出数据:
D、图书信息删除:
输入数据:
输出数据:
E、图书信息修改
输入数据:
输出数据:
F、系统退出
输入数据:
数据输出:
7.设计体会。
一学期的C语言课程学习,已经接近尾声。在这学期的学习中,虽然没有达到对C语言很了解,但是在今后的生活中,不断积累,不断学习这门课程。因为都知道这门课程的重要性以及参加工作后的必要性。学好C语言,对今后找工作各方面都有着很大的帮助,所以我们有机会学习这门课程,就必须学好。
仔细想想学习C语言 的过程中,烦恼多多。C 语言程序设计到底是有什么用。这门课程是用来做什么的。这就是我最初的疑惑。后来慢慢的接触多了,渐渐的有了点认识。其实我十分不喜欢这门课程,真的。当上机操作程序,经过编译,调试和运行后,出现界面,当时觉得很好奇,想真正的学好这门课程。通过半个学期的学习,我了解了基本知识。知道编程的基本格式,学会了一些基本语句,在程序中一些符号所代表的含义以及在程序中所要表示的含义。
编写程序时,要注意的地方很多,一个小小的符号错误就会导致程序编译失败,很纠结的事情。所以编程时要十分仔细小心。
学了各种语句,编写了几个程序,这只不过是C语言中基本再基本的东西了,但还是挺模糊的,对学习这门课程讲究的是过程。学习编译基本程序后,才可以编译更加难的程序。慢慢来吧,有些事情做了不一定成功,但是不去做肯定不会成功。我相信只要努力学习。总有一天我会学好这门课程的。
七、附录
1.流程图
主页面:
信息录入:
信息浏览:
信息查询:
信息删除:
信息修改:
系统退出:
2.主要过程列表
A、程序开头定义:
#include<stdio.h>:#include是编译预处理指令,就是在编译前将stdio.h这个文件里的函数都添加到你写的cpp文件中。
#include<string.h>:在编译前C语言里面关于字符数组的函数定义的头文件,就是在编译前将stdio.h这个文件里的函数都添加到你写的cpp文件中。
#include<stdlib.h>:在编译前将stdlib.h这个文件里的函数都添加到你写的cpp文件中。
#include<conio.h>:在编译前将conio.h这个文件里的函数都添加到你写的cpp文件中。
#define MAX 100:#define 就是在编译器编译之前对代码进行字符串替换,即是把MAX换成100.
B、struct Student:
结构体,定义的结构体是整个程序的共用体,即是该结构体可在每个模块中不从新定义就使用。
C、main()主函数模块主要变量、函数:
void Input():自定义输入函数。
void Display():自定义输出函数。
void Find():自定义查找函数。
void Modify():自定义删除函数。
void Change():自定义修改函数。
for():循环函数。
switch():选择函数,判断用户输入的数字进行功能选择。
exit():退出循环函数。
D、void Input()输入模块主要变量、函数:
FILE *fp:声明fp是指针,用来指向FILE类型的对象。
fopen(): fopen函数用来打开一个文件。
printf():输出函数,以程序员规定数据类型把数据输出到窗口上。
scanf():输入函数,以程序员规定的的数据类型输入数据。
if()…else:条件判断函数。
fclose():关闭文件的函数,功能为关闭打开的文件,以防止数据丢失。
fwrite():向文件写入一个数据块。
sizeof():以字节形式给出了其操作数的存储大小。
for():循环函数。
E、void Display()输出函数主要变量、函数:
FILE *fp:声明fp是指针,用来指向FILE类型的对象。
fread():在文件中读出一个数据块赋值给某一个变量
fopen(): fopen函数用来打开一个文件。
fclose():关闭文件的函数,功能为关闭打开的文件,以防止数据丢失。
printf():输出函数,以程序员规定数据类型把数据输出到窗口上。
scanf():输入函数,以程序员规定的的数据类型输入数据。
if()…else:条件判断函数。
for():循环函数。
F、void Find()查找函数主要的变量和函数:
FILE *fp:声明fp是指针,用来指向FILE类型的对象。
char ans[100]:一个定义为字符型的有100个元素的数组。
strcmp(,):比较函数。比较逗号两边的值是否一样,如果一样返回值为0,否则为1 。
do….while:循环函数,当函数返回值为1时退出循环,否则继续循环。
fopen(): fopen函数用来打开一个文件。
fclose():关闭文件的函数,功能为关闭打开的文件,以防止数据丢失。
if()…else:条件判断函数。
for():循环函数。
printf():输出函数,以程序员规定数据类型把数据输出到窗口上。
scanf():输入函数,以程序员规定的的数据类型输入数据。
G、void Modify()删除函数主要变量和函数:
fopen(): fopen函数用来打开一个文件。
fclose():关闭文件的函数,功能
展开阅读全文