c语言 图书信息管理系统设计

Python017

c语言 图书信息管理系统设计,第1张

通过测试!

#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=0i<MAXi++) if(strcmp(ans,stu[i].name)==0)

{

t=i

fp=fopen("student","rb")

for(i=0fread(&stu[i],sizeof(struct Student),1,fp)==1i++)

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=0i<MAXi++)

if(strcmp(ans,stu[i].author)==0)

{ t=i

fp=fopen("student","rb")

for(i=0fread(&stu[i],sizeof(struct Student),1,fp)==1i++)

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=0fread(&stu[i],sizeof(struct Student),1,fp)==1i++)

{

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","wb")

for(n=0n<MAXn++)

{

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=0fread(&stu[i],sizeof(struct Student),1,fp)==1i++)

{

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=1flag&&i<ni++)

{

if(s==stu[i].num)

{

for(j=ij<n-1j++)

{

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=0i<ni++)

fwrite(&stu[i],sizeof(struct Student),1,fp)

fclose(fp)

fp=fopen("student","r")

printf(" 图书列表\n")

printf("-----------------------------------------------------------\n")

printf("登录号书名作者名 分类号 出版单位 出版时间 价格\n")

printf("-----------------------------------------------------------\n")

for(i=0i<ni++)

{

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

printf("请输入要修改的图书号:")

scanf("%d",&num)

for(i=0i<=MAXi++)

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=0fread(&stu[i],sizeof(struct Student),1,fp)==1i++)

{

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)

}

一 程序设计说明书

【设计题目】 图书馆借阅管理

【问题描述】图书馆,适合用C++面向对象的功能来描述。图书馆管理系统分为借书、还书、图书管理和读者服务等四个部分。设计一个读者类Reader,记录每个读者基本信息;读者库类Rdatabase,记录所有读者信息;图书类Book, 记录每本书的基本信息;图书库类Bdatabase, 记录所有图书信息。

【基本要求】

1读者库类RDatabase中,其构造函数中,将read.txt文件中所有读入读者记录rede[]中。处理完毕,在析构函数中将read[]中的所有未删记录写入到read.txt中。

2图书库类BDatabase中,其构造函数中,将book.txt文件中所有读入图书记录book[]中。处理完毕,在析构函数中将book[]中的所有未删记录写入到book.txt中。

3 利用构造函数完成读者和图书数据初始化,完成内存分配。程序结束前,析构函数完成所申请的堆内存空间。

4 编写主函数,对所编写的矩阵类进行全面测试。要求用户界面采用菜单方式。测试中需要读者和图书数据通过I/O流从磁盘文件读入,同时显示在屏幕上。得到的数据通过I/O流写入磁盘文件保存,同时显示在屏幕上。

5 源程序中要有充分的注释,报告中要有详细的流程图和文字材料。

【类的设计】

该程序包含了四个类,如下:

1.Reader类,有读者的基本管理功能,具有以下私有数据:

int tag//删除标记 1:已删;0:未删

int no//读者编号

char name[10]//读者姓名

int borbook[Maxbor]//所借图书

2.读者库类Rdatabase, 具有以下私有数据:

int top//读者记录指针

Reader read[Maxr]//读者记录

3.图书库类Book,有一本图书的基本功能,有以下私有数据:

int tag//删除标记 1:已删;0:未删

int no//图书编号

char name[20]//书名

int onshelf//是否在架 1在架 0已借

4.图书库类BDatabase,有以下私有数据:

int top//图书记录指针

Book book[Maxb]//图书记录

【特殊函数的设计说明】

构造函数

1.Reader类中构造函数Reader(),初始化函数;

2.读者库类RDatabase中,其构造函数Rdatabase(),将read.txt文件中所有读入读者记录rede[]中。

3.Book类中构造函数Book(),初始化函数;

4.图书库类BDatabase中,其构造函数中,将book.txt文件中所有读入图书记录book[]中。

拷贝构造函数

Reader类中的拷贝构造函数将getname()的返回值读者姓名拷贝到setname()中,Book类中的拷贝构造函数将getname()函数的返回值图书名拷贝到图书名设置函数setname()中。

析构函数

1.读者库类RDatabase中,其析构函数~Rdatabase(),将read[]中的所有未删记录写入到read.txt中;

2.图书库类BDatabase中,其析构函数~Bdatabase(),将book[]中的所有未删记录写入到book.txt中。

运算符重载

重载了“=”,当比较读者编号和图书编号时,重载;重载位运算符“〈〈”和“〉〉”等。

【主要函数算法流程图】

【程序的使用方法】

1.进入操作页面,按提示操作;

2.首先,新增图书和读者信息,之后就可以对以存在的信息进行操作;

3.操作当中,可以随时增加,更改和删除图书或读者信息;

4.当选择退出时,进行清屏。

二 程序上机调试报告

【语法错误及其排除】

1.在敲程序时,有很多拼写错误,例好多处把Readdata()误打Readdate();结束的分号,在不同的输入法状态下输入,这些小错误刚开始很难发现,不过有了经验,就很容易了。

2.创建新的构造函数时,使用出现了错误。重载构造函数要注意函数的访问权限,结果就不会出现错误。

【算法错误及其排除】

1.读者类中借书操作函数中,采用循环语句时判断读者已借图书量时for(int i=0i<Maxbori++)误写为for(int i=1i<Maxbori++),使循环发生错误。

2.指针使用错误,指针b和r混淆,导致编译错误得到“error C2660: 'retbook' : function does not take 1 parameters”错误报告。