C++语言程序
课程设计报告
课程设计题目:图书信息管理系统
学 号:2013103120131
姓 名:曾智煌
专 业:电气工程及其自动化
班 级:13电气1班
20##年 12 月 12日
图书管理系统
一.设计目的:
图书馆是目前生活中除了网络外的另一个获取知识的重要场所。利用图书管理系统对图书记录进行统一管理,包括新增图书记录,更改图书记录,删除图书记录等功能,实现图书管理工作的系统化,规范化和自动化,为图书管理提供便利。同时是学习完《面向对象程序设计》课程后进行的一次全面的综合练习。有助于加深对面向对象程序设计中基础理论和基本知识的理解,培养了实践能力,促进理论与实践的结合。
二.设计要求:
1.图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。试设计一图书信息管理系统,使之能提供以下功能:
2.系统以菜单方式工作?
3.图书信息录入功能(图书信息用文件保存)--输入?
4.图书信息浏览功能--输出?
5.查询和排序功能:(至少一种查询方式)--算法?
6.按书名查询
7.按作者名查询
8.图书信息的删除与修改(可选项)?
三.设计方案及流程图:
1、类的设计
①、Book类的设计(内部函数流程图):
②、BDatabase类的设计:
③、主函数流程图:
四、程序源代码:
#define StrNum 20
#define Type 20
#include <iostream>
#include <iomanip>
#include <string>
#include <fstream> //输入/输出文件流类
using namespace std;
const int Maxb=100; //最多可存储的图书
class Book
{
private:
int lab; //删除标记
int num; //图书编号
int add; //增加标记
char number[StrNum]; //编号
char bookname[StrNum]; //书名
char bookkind[Type]; //图书类型
public:
Book(){}
char getkind() //获取图书类型
{
return bookkind[Type];
}
char getname() //获取书名
{
return bookname[StrNum];
}
int getnum() //获取图书编号
{
return num;
}
int getlab() //获取删除标记
{
return lab;
}
void setname(char na[]) //设置书名
{
strcpy(bookname,na);
}
void setkind(char kin[]) //设置类型
{
strcpy(bookkind,kin);
}
void delbook() //删除图书
{
lab=1;
}
void addbook(int n,char *na,char *kin) //增加图书
{
lab=0;
num=n;
strcpy(bookname,na);
strcpy(bookkind,kin);
}
void disp() //输出图书
{
cout.flags (ios::left); //设置对齐的标志位为左
cout<<setw(15)<<num<<setw(20)<<bookname<<setw(15)<<bookkind<<endl;
}
};
class BDatabase
{
private:
int top;
Book book[Maxb]; //图书记录
public:
BDatabase() //构造函数,将book.txt读到book[]中
{
Book b;
top=-1;
fstream file("book.txt",ios::in);
while (1)
{
file.read((char *)&b,sizeof(b));
if (!file) break;
top++;
book[top]=b;
}
file.close();
}
void clear() //全删
{
top=-1;
}
int addbook(int n,char *na,char *kin) //增加图书
{
Book *p=query(n);
if(NULL==p)
{
top++;
book[top].addbook(n,na,kin);
return 1;
}
return 0;
}
Book *query(int bookid) //查找图书
{
for (int i=0;i<=top;i++)
if (book[i].getnum()==bookid &&book[i].getlab()==0)
{
return &book[i];
}
return NULL;
}
void disp() //图书库
{
for (int i=0;i<=top;i++)
if (book[i].getlab()==0)
book[i].disp();
}
~BDatabase() //析构函数,将book[]写到book.txt文件中,实现文本的写入
{
fstream file("book.txt",ios::out);
for (int i=0;i<=top;i++)
if (book[i].getlab()==0)
file.write((char *)&book[i],sizeof(book[i]));
file.close();
}
};
void main()
{
BDatabase BookDB;
char choice;
char bname[40];
char bkind[40];
char newType[20];
int bookid;
Book *b;
while (choice!='0')
{
cout<<"\t******************************************************************\n";
cout<<" \n\n";
cout<<"\t\t\t图 书 管 理 系 统\n\n";
cout<<"\t\t\t1 新增图书记录\n";
cout<<"\t\t\t2 更改图书记录\n";
cout<<"\t\t\t3 删除图书记录\n";
cout<<"\t\t\t4 查找图书记录\n";
cout<<"\t\t\t5 显示图书记录\n";
cout<<"\t\t\t6 清空全部记录(慎用)\n";
cout<<"\t\t\t0 退出系统\n";
cout<<" \n\n";
cout<<"\t******************************************************************\n";
cout<<"请选择(1,2,3,4,5,6,0):";
cin>>choice;
switch (choice)
{
case '1':
cout<<"输入图书编号:"<<endl;
cin>>bookid;
cout<<"输入图书类型:"<<endl;
cin>>newType;
cout<<"输入图书书名:"<<endl;
cin>>bname;
BookDB.addbook(bookid,bname,newType);
break;
case '2':
cout<<"输入图书编号:"<<endl;
cin>>bookid;
b=BookDB.query(bookid);
if(b==NULL)
{
cout<<"该图书不存在"<<endl;
break;
}
cout<<"输入新的书名:"<<endl;
cin>>bname;
b->setname(bname);
cout<<"输入新的类型:"<<endl;
cin>>bkind;
b->setkind(bkind);
break;
case '3':
cout<<"读入图书编号:"<<endl;
cin>>bookid;
b=BookDB.query(bookid);
if(b==NULL)
{
cout<<"该图书不存在"<<endl;
break;
}
char tg1;
cout<<"确定要删除此记录吗?(Y/N)"<<endl;
cin>>tg1;
if(tg1!='n'&&tg1!='N')
{
b->delbook();
cout<<"已成功删除该书记录!"<<endl;
break;
}
case '4':
cout<<"读入图书编号:"<<endl;
cin>>bookid;
b=BookDB.query(bookid);
if (b==NULL)
{
cout<<"该图书不存在"<<endl;
break;
}
cout<<"图书编号 图书名称 图书类型 \n";
b->disp();
break;
case '5':
cout<<"图书编号 图书名称 图书类型 \n";
b->disp();
break;
case '6':
char tg2;
cout<<"确定要清空所有记录吗?(Y/N)"<<endl;
cin>>tg2;
if(tg2!='n'&&tg2!='N')
{
BookDB.clear();
cout<<"已成功清空记录!"<<endl;
break;
}
case '0':
break;
default:cout<<"输入错误,请从新输入(数字为0~6):";
}
}
}
五.总结:
本系统实现了图书管理系统的典型功能,包括查询所有记录的信息,添加查找等功能,基本符合设计要求,利用类的封装实现了一定的安全性,函数的实现与调用在主函数中实现。
但在记录查询上仍有缺陷,有待于完善。
六、实验心得:
1、通过实验加深了对c++的了解,在程序设计上提高了自己的动手能力,在实践中增强了自己的编程水平。
2、但是因为自己独立完成且能力有限,还有部分功能未能完善,例如对书名,编号的排序等等,这些局限性都是有待逐步完善的方面。
3、而且通过这次课程设计,我培养了自己对C++编程的兴趣,编程能力也有所提高,但仍存在许多不足,不能独自写出功能很齐全的代码,写代码要参考很多资料,所以今后应培养自己独立写代码的能力。
C语言课程设计报告
图书信息管理系统设计
C 语言程序设计
编程实践是学习C语言程序设计的一重要环节,上机实习和课程设计是提高同学们程序设计能力的有效途径,能够使同学们初步掌握程序设计的基本方法和调试技能。学校安排上机时间有限,老师也只能教给我们一些方法,而我们自己需要投入很大的时间和精力来锻炼。
1、题目要求
设计“图书信息管理系统”
要求:
图书信息包括:登录号,书名,作者名,分类号,出版单位,出版时间,价格等。使之提供以下功能:
(1) 系统以菜单方式工作。
(2) 图书信息录入功能。(图书信息用文件保存)。
(3) 图书信息浏览功能。
(4) 图书信息查询功能。
(5) 图书信息的删除和修改。
2、分析:
根据题目要求,应当把图书信息用结构体形式输入,再定义一个全局变量和文件指针进行整个程序的运行,然后把图书信息送到文件中,所以应该提供一个结构体和文件的输入输出等操作;在程序中需实现图书信息录入,浏览,查询,删除和修改等功能的操作,所以需要建立相应的模块来实现;另外还需提供键盘式选择菜单实现功能,在运行时达到所要目的。
3、总体设计:
根据题目要求,可以将系统分为六个模块:
(1) 管理员登录系统模块。
(2) 菜单选择模块。
(3) 图书信息录入功能模块。
(4) 图书信息浏览功能。
(5) 图书信息查询功能。
(6) 图书信息的删除和修改。
4、详细设计:
头函数名:
#include
#include
#include
/*********图书信息结构体*********/
/***包括登录号,书名,作者名,分类号,出版单位,出版时间,价格等***/
struct bookinf
{ int num; ******************************************************登录号
char bname[20];***************************************书名
char wname[10];***************************************作者名
char clanum[14];***************************************分类号
char pubcom[10];***************************************出版单位
char pubtime[10];***************************************出版时间
float price;*********************************************价格
};
一管理员登录系统模块:
(1) 来到图书信息管理系统页面
void index()
{
char input; 注释:运行时
printf("\n\n\t\t\t*****************************\n"); 直接进入
printf("\t\t\t 图书信息管理系统\n"); 这个页面
printf("\t\t\t*****************************\n\n\n");
printf(" ------------------------------------------------------------------------------\n");
printf("\t<按任意键进入>\n\t");
input=getchar();
}
(2) 管理员登陆进入功能菜单页面
第2页
FILE *fp;
struct manage pswd;
if ((fp=fopen("password.txt","r"))==NULL)
{
printf("\n\n\n\tCannot open file!\n\t");
}
else
{
do
{
printf("\n\n\t请输入管理员帐号:");
scanf("%s",name);
printf("\n\n\t请输入管理员密码:");
scanf("%s",password);
fp=fopen("password.txt","r");
fread(&pswd,sizeof(struct manage),1,fp);
fclose(fp);
w=strcmp(pswd.manage_name,name);
k=strcmp(pswd.password,password);
adm_servelist();
}
while (w!=0||k!=0);
adm_servelist();
}
}
(3)来到功能菜单页面
第3页
void adm_servelist()
{
void book_add();
void book_view();
void change();
void del();
void book_search();
void login();
void pwchange();
int in; 注释:菜单列出的服务种类
char input; 从1,2,3,4,5,6
do 所对应的功能进行选择
{
printf("\n\n\n\t--欢迎使用信息管理系统--");
printf("\n\n\t1.图书信息录入\n");
printf("\t2.图书信息浏览\n");
printf("\t3.图书信息查询\n");
printf("\t4.图书信息删除\n");
printf("\t5.图书信息修改\n");
printf("\t6.退出管理模式\n");
printf("\n\t请选择服务种类:");
scanf("%d",&in);
if (in!=1&&in!=2&&in!=3&&in!=4&&in!=5&&in!=6)
{
printf("\n\t没有这项服务~\n");
printf("\t按任意键重新选择");
input=getchar();
}
}
while (in!=1&&in!=2&&in!=3&&in!=4&&in!=5&&in!=6);
switch (in)
{
case 1: book_add(); break; 注释:选择自己所需要
case 2: book_view(); break; 后摁下数字键则
case 3: book_search(); break; 则进入此功能页面
case 4: del(); break;
case 5: change();break;
case 6: login(); break;
}
}
(3)图书信息录入功能模块
void book_add()
{
第4页
void adm_servelist();
void book_add();
int i=0,j;
FILE *fp;
char input; 注释:输入的图书信息
struct bookinf books; 是通过文件进行
struct bookinf book_taxis[30]; 保存的
printf("\n\n\n\t---请输入图书信息---\n\n");
printf("\t登录号:");
scanf("%d",&books.num);
printf("\n\t书名:");
scanf("%s",books.bname);
printf("\n\t作者名:");
scanf("%s",books.wname);
printf("\n\t分类号:");
scanf("%s",books.clanum);
printf("\n\t出版单位:");
scanf("%s",books.pubcom);
printf("\n\t出版时间:");
scanf("%s",books.pubtime);
printf("\n\t价格:");
scanf("%f",&books.price);
if ((fp=fopen("book.txt","r"))!=NULL)
{
do
{
fread(&book_taxis[i],sizeof(struct bookinf),1,fp);
i=i+1;
}
while(!feof(fp));
fclose(fp);
for (j=0;j<=i;j++)
if (books.num==book_taxis[j].num)
{
printf("\n\n\n\t对不起,这个编号已经使用过了~\n");
printf("\t按任意键返回管理菜单~");
input=getchar();
adm_servelist();
break;
}
}
if ((fp=fopen("book.txt","r"))==NULL)
{
第5页
fp=fopen("book.txt","w");
}
else
{
fclose(fp);
fp=fopen("book.txt","a");
}
fwrite(&books,sizeof(struct bookinf),1,fp);
fclose(fp);
printf("\n\n\n\t信息输入完毕~按任意键继续\n");
input=getchar();
adm_servelist();
}
(4) 图书信息浏览功能模块
void book_view()
{
void adm_servelist();
void book_view();
int inp,i=0,n=0;
FILE *fp;
char input;
struct bookinf bookview[20];
if ((fp=fopen("book.txt","r"))==NULL)
{
printf("\n\n\n\t数据尚未初始化~~\n\n\t请在管理菜单中增加图书信息~~~\n");
printf("\n\t<按任意键返回管理菜单>\n\t");
input=getchar();
adm_servelist();
}
else
{
do
{
fread(&bookview[i],sizeof(struct bookinf),1,fp);
i=i+1;
}
while (!feof(fp));
fclose(fp);
do
{
printf("\n\t--------共有%d条记录--------",i-1);
printf("\n\n\t登录号: %d\n",bookview[n].num);
第6页
printf("\n\t书名: %s\n",bookview[n].bname);
printf("\n\t作者名: %s\n",bookview[n].wname);
printf("\n\t分类号: %s\n",bookview[n].clanum);
printf("\n\t出版单位: %s\n",bookview[n].pubcom);
printf("\n\t出版时间: %s\n",bookview[n].pubtime);
printf("\n\t价格: %f\n",bookview[n].price);
printf("\n\n\t1.上一页\t2.下一页\t3.回目录\n");
printf("\n\t请选择:");
scanf("%d",&inp);
switch (inp)
{
case 1:
{
if (n==0)
{
printf("\n\t已到达首页\n\t按任意键重新选择");
input=getchar();
}
else n=n-1; break;
}
case 2:
{
if (n==i-2)
{
printf("\n\t已到达最末页\n\t按任意键重新选择");
input=getchar();
}
else n=n+1; break;
}
case 3:
{
adm_servelist();
break;
}
default:
{
printf("\n\t没有这项服务\n\t按任意键重新选择");
input=getchar();
}
}
}
while (inp!=3);
第7页
}
}
(5) 图书信息修改与删除功能模块
修改:
void change(int x)
{
int inp,i=0,j;
void book_search();
FILE *fp,*fp1;
char input;
struct bookinf books,book_taxis[20];
do
{
printf("\n\n\n\t注意:您确定要修改该记录吗?\n");
printf("\n\t1.是\t2.否\n");
printf("\n\t请输入:");
scanf("%d",&inp);
if (inp!=1&&inp!=2)
{
printf("\n\t对不起~没有这项服务~\n");
printf("\t按任意键重新选择\n\t");
input=getchar();
}
}
while (inp!=1&&inp!=2);
if (inp==2)
book_search();
if (inp==1)
{
printf("\n\n\n\t---请输入图书信息---\n\n");
printf("\t登录号:");
scanf("%d",&books.num);
printf("\n\t书名:");
scanf("%s",books.bname);
printf("\n\t作者名:");
scanf("%s",books.wname);
printf("\n\t分类号:");
scanf("%s",books.clanum);
printf("\n\t出版单位:");
scanf("%s",books.pubcom);
printf("\n\t出版时间:");
scanf("%s",books.pubtime);
第8页
printf("\n\t价格:");
scanf("%f",&books.price);
if ((fp1=fopen("book.txt","r"))!=NULL)
{
do
{
fread(&book_taxis[i],sizeof(struct bookinf),1,fp1);
i=i+1;
}
while(!feof(fp1));
fclose(fp1);
for (j=0;j
if (books.num==book_taxis[j].num)
{
printf("\n\n\n\t对不起,这个编号已经使用过了~\n");
printf("\t按任意键返回管理菜单~");
printf("0");
input=getchar();
book_search();
break;
}
for (j=x+1;j
if (books.num==book_taxis[j].num)
{
printf("\n\n\n\t对不起,这个编号已经使用过了~\n");
printf("1");
printf("\t按任意键返回管理菜单~");
input=getchar();
book_search();
break;
}
}
book_taxis[x]=books;
fp=fopen("book.txt","w");
for (j=0;j
fwrite(&book_taxis[j],sizeof(struct bookinf),1,fp);
fclose(fp);
printf("\n\n\t信息修改完成!按任意键返回");
input=getchar();
book_search();
第9页
}
}
S删除:
void del(int y)
{
char input;
FILE *fp;
int inp,i=0,j;
struct bookinf book_taxis[20];
void book_search();
void adm_servelist();
do
{
printf("\n\n\n\t注意:您确定要删除该记录吗?\n");
printf("\n\t1.是\t2.否\n");
printf("\n\t请输入:");
scanf("%d",&inp);
if (inp!=1&&inp!=2)
{
printf("\n\t对不起~没有这项服务~\n");
printf("\t按任意键重新选择\n\t");
input=getchar();
}
}
while (inp!=1&&inp!=2);
if (inp==2)
book_search();
if (inp==1)
{
if ((fp=fopen("book.txt","r"))!=NULL)
{
do
{
fread(&book_taxis[i],sizeof(struct bookinf),1,fp);
i=i+1;
}
while(!feof(fp));
fclose(fp);
}
if (i>2)
{
fp=fopen("book.txt","w");
第10页
for (j=0;j
fwrite(&book_taxis[j],sizeof(struct bookinf),1,fp);
fclose(fp);
fp=fopen("book.txt","a");
for (j=y+1;j
fwrite(&book_taxis[j],sizeof(struct bookinf),1,fp);
fclose(fp);
}
else
{
remove("book.txt");
}
printf("\n\n\t记录已删除!\n\n\t按任意键返回\n\t");
input=getchar();
adm_servelist();
}
}
(6) 图书信息查询功能模块
void book_search()
{
void adm_servelist();
void id_search();
void wr_search();
void bn_search();
char input;
FILE *fp;
int inp;
if ((fp=fopen("book.txt","r"))==NULL)
{
printf("\n\n\n\t数据尚未初始化~~\n\n\t请在管理菜单中增加图书信息~~~\n");
printf("\n\t<按任意键返回管理菜单>\n\t");
input=getchar();
adm_servelist();
}
else
{
do
{
printf("\n\n\n\t1.按图书登录号查询\n");
printf("\n\t2.按图书作者查询\n");
第11页
printf("\n\t3.按图书名查询\n");
printf("\n\t4.回到主菜单\n");
printf("\n\n\t请选择查询类别:");
scanf("%d",&inp);
if (inp!=1&&inp!=2&&inp!=3&&inp!=4)
{
printf("\n\n\t没有这项服务~\n\t按任意键重新选择~");
input=getchar();
}
}
while (inp!=1&&inp!=2&&inp!=3&&inp!=4);
fclose(fp);
switch (inp)
{
case 1: id_search(); break;
case 2: wr_search(); break;
case 3: bn_search(); break;
case 4: adm_servelist(); break;
}
}
}
5运行与测试报告:
第12页
第13页
三 后记/课程设计过程中遇到的问题以及解决方法,课程设计的体会。
这次课程设计让我掌握了许多的有用知识。首先通过不断地学习和锻炼更加熟练地掌握应用软件Microsoft Visual C++ 6.0 了。设计正确及合适的程序对于我们初学者来说是很大的难题,出现一丁点儿错误就得非很大的努力去修改,正式者一步步一点点的努力让我对C语言游乐更深的认识。同时我掌握了解决问题的方法,这无论是对以后的学习、生活都有无比重要的价值。
在设计中,每个同学都会遇到一些困难,或多或少,这些困难常常让我心情烦躁,比如不能清晰的建立设计模块,不会修改出现的错误等等,然后我向同学寻求帮助,向他们学习,最终通过自己努力建立了模块。不可避免地程序中肯定依然存在者某些问题,我希望在以后的学习和应用中不断提高自己的能力,攻克遇到的困难。
第14页
管理信息系统课程设计设计题目班级学生成绩查询系统专业班级学生姓名终结者队指导教师2012年4月19日目录1人员介绍3A终结者3B队…
管理信息系统课程设计报告题目库存管理信息系统学生姓名指导教师成绩日期20xx年9月8号目录目录2摘要3库存管理管理信息系统4第一章…
管理信息系统课程设计报告课程设计任务书一课程设计课题题目安徽工程大学地下超市收银系统开发二课程设计原始资料地下超市商品信息三课程设…
1摘要企业工资管理系统是公司管理的一个重要内容是一种典型的管理系统企业工资管理系统是公司管理的一个重要内容是一种典型的管理系统其开…
MIS课程设计课设题目:中国电信(江苏分公司)供应链管理系统学院管理学院专业___市场营销________班别___09市场营销(…
课程设计报告基于JSP的图书管理系统专业班级计科姓名XXX学号123456指导老师XXXX20xx年1月1日第一章绪论11课题的研…
滨江学院Java程序设计实习课程设计题目图书管理系统学生姓名张立檑学号20xx2346035院系滨江学院专业年级11网络工程1指导…
课程设计实验报告课程名称数据库课程设计系院数学与计算机学院班级20xx级计算机科学与技术指导教师欧方平摘要随着人类社会的发展人类对…
开题报告课题名称图书管理系统一立项依据1课题的目的及意义本次毕业设计所从事的课题题目是基于VB的图书管理系统的设计与实现课题的目的…
第三章图书管理系统的设计与实现3.1系统的需求分析图书登记管理系统作为一个应用软件将为学校的老师和学生提供一个对学校图书馆深入了解…
合肥学院计算机科学与技术系课程设计报告20xx20xx学年第二学期课学学专指业导班教生姓程C语言课程设计图书管理系统名号级师课程设…