图书馆管理系统源代码

数据库:
创建数据表
图书表信息如下:
图书编号:自动编号(标识列),从1开始,主键
书名:必填
作者:必填
出版社编号:外键
单价:必填,不低于1元
ISBN:必填
出版日期:必填
销售状态:0或1,0表示待售,1表示已售,默认0
备注:可选
出版社信息如下:
出版社编号:自动编号(标识列),从1开始,主键
出版社名称:必填
地址:必填
备注:可选
系统用户信息如下:
用户编号:主键
用户名:必填、唯一
密码:必填、默认“888888”
实际姓名:必填
性别:只能是“男”或“女”,默认“男”
出生年月:必填
状态:0或1,0表示正常,1表示该用户被禁用
会员信息如下:
会员编号:6位数字,首位必须是1、2、3,第二位必须是3或8或9、主键
姓名:必填
联系电话:必填,格式为xxxx-xxxxxxxx(区号3位或4位,号码7-8位,区号、号码之间有分隔线,共13位)或手机号(手机号必须以1开头,第二位为3、5、8,共11位)
身份证号:必填,只能是18位,身份证号唯一约束,首位不能为0,末位为0-9或X;
积分值:默认为0
会员组编号:外键
状态:0或1,0表示正常,1表示挂失
会员组信息如下:
会员组编号:3位数字、主键
会员组类型:只能0或1,0表示普通、1表示VIP
图书销售信息表如下:
销售编号:自动编号(标识列),从1开始,主键
图书编号:外键
销售日期: 默认当前日期
收银员:必填,外键(系统用户)
是否会员:“是”或“否”
会员编号:可选
进货入库表如下:
入库编号:自动编号(标识列),从1开始,主键
图书编号:必填,外键
单价:必填,大于0
入库日期:默认当前日期
进货人:必填,外键(系统用户)
供货商:必填

创建数据表
图书表信息如下:
图书编号:自动编号(标识列),从1开始,主键
书名:必填
作者:必填
出版社编号:外键
单价:必填,不低于1元
ISBN:必填
出版日期:必填
销售状态:0或1,0表示待售,1表示已售,默认0
备注:可选

create table 图书表
(
图书编号 int IDENTITY (1, 1) primary key ,
书名 nvarchar(30) not null,
作者 nchar(10) Not null,
出版社编号 nachar(20) foreign key references 出版社信息(出版社编号),
单价 decimal(5,2) check 单价>=1,
ISBN char(20) not null,
出版日期 smalldatetime not null,
销售状态 bool default 0,
备注 memo
)

出版社信息如下:
出版社编号:自动编号(标识列),从1开始,主键
出版社名称:必填
地址:必填
备注:可选

create table 出版社信息
(
出版社编号 int IDENTITY (1, 1) primary key ,
出版社名称 nvarchar(30) not null,

地址 nvarchar(100) not null,
备注 memo
)
系统用户信息如下:
用户编号:主键
用户名:必填、唯一
密码:必填、默认“888888”
实际姓名:必填
性别:只能是“男”或“女”,默认“男”
出生年月:必填
状态:0或1,0表示正常,1表示该用户被禁用

create table 用户信息
(
用户编号 int IDENTITY (1, 1) primary key ,
用户名 varchar(20) unique,not null,
密码 nchar(16) not null,default ‘888888’,
实际姓名 nvarchar(10) not null,
性别 nvarchar(2) ,default ‘男’,check 性别 in (‘男’,‘女’),
出生年月 smalldatetime not null,
状态 bool
)

会员信息如下:
会员编号:6位数字,首位必须是1、2、3,第二位必须是3或8或9、主键
姓名:必填
联系电话:必填,格式为xxxx-xxxxxxxx(区号3位或4位,号码7-8位,区号、号码之间有分隔线,共13位)或手机号(手机号必须以1开头,第二位为3、5、8,共11位)
身份证号:必填,只能是18位,身份证号唯一约束,首位不能为0,末位为0-9或X;
积分值:默认为0
会员组编号:外键
状态:0或1,0表示正常,1表示挂失

create table 会员信息
(
会员编号 char(6) primary key ,check((会员编号 between '130000' and '399999')and (会员编号 like '[123][389]%'),
姓名 nvarchar(10) not null,
联系电话 char(13) not null,
身份证号 char(18) not null,
积分值 int default 0,
会员组编号 tinyint foreign key references 会员组信息(会员组编号),
状态 bool
)

会员组信息如下:
会员组编号:3位数字、主键
会员组类型:只能0或1,0表示普通、1表示VIP

create table 会员组信息
(
会员组编号 tinyint check 会员组编号>=100 and 会员组编号<=999,
会员组类型 bool
)


图书销售信息表如下:
销售编号:自动编号(标识列),从1开始,主键
图书编号:外键
销售日期: 默认当前日期
收银员:必填,外键(系统用户)
是否会员:“是”或“否”
会员编号:可选

create table 图书销售信息表
(
销售编号 int IDENTITY (1, 1) primary key ,
图书编号 int foreign key references 图书信息(图书编号),
销售日期 smalldatetime default getdate(),
收银员 int not null,foreign key reference 用户信息(用户编号),
是否会员 bool,
会员编号 nchar(10)
)

进货入库表如下:
入库编号:自动编号(标识列),从1开始,主键
图书编号:必填,外键
单价:必填,大于0
入库日期:默认当前日期
进货人:必填,外键(系统用户)
供货商:必填

create table 进货入库表
(
入库编号 int IDENTITY (1, 1) primary key ,
图书编号 int foreign key references 图书信息(图书编号)


单价 decimal(5,2) not null ,check 单价>0,
入库日期 smalldatetime default getdate(),
进货人 int not null,foreign key reference 用户信息(用户编号),
供货商 nvarchar(30) not null
)




c语言版:要求:
设计图书信息管理系统,图书信息包括:书号、书名、作者名、、出版时间、价格等。
1、系统以菜单方式工作,密码登陆。
2、图书信息的录入功能(增加数据)。
3、图书信息的删除(删除数据)。
4、图书信息的浏览功能(查找数据)。
5、图书信息的删除(修改数据)。
6、]图书信息的计算并排序。计算所有图书的总价格及平均价格(aver,单精度,输出一位小数),将包括所有数据的数组元素按价格从高到低的顺序排序打印出来。

#include
#include
#include
#include
#include
#define STACK_INIT_SIZE 10
#define OK 1
#define TRUE 1
#define FALSE 0
#define ERROR 0

struct student /*定义学生类型,用于存放借出的书籍*/
{
int carnum;
char lendbook[10];
}student[1000];

struct employ /*定义职工类型*/
{
int employnum;
char employname[15];
int employage;
char employsex[2];
char employleve[10];
long int employtage;
}employ[50];

struct book /*定义书的类型*/
{
int booknum;
char bookname[10];
char bookcreat[10];
int turefalse; /*用于借书和还书模块判断一本书是否借出的条件*/
}book[1000];

struct car /*借书卡的数据类型*/
{
int carnum;
char studentname[10];
int studentclass;
}car[100];


huanbook() /*还书函数*/
{
FILE *fp,*fp2; /*定义两个文件指针,fp2用于修改数据时设立临时文件用,防止数据遭破坏*/
int i,n;
int carnum;
char lendbook[10];
printf("请你输入你的卡号\n");
scanf("%d",&carnum);
fp=fopen("car.txt","r"); /*读取卡号记录*/
for(i=0;fread(&car[i],sizeof(struct car),1,fp)!=0;i++) /*for循环判断卡号是否存在*/
{
if(car[i].carnum==carnum) /*卡号存在,进入下一循环*/
{
n=i;
fclose(fp);
printf("请输入你要还的书的名字\n");
scanf("%s",lendbook);
fp=fopen("record.txt","r");
for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++) /*判断是否借阅了输入的书*/
{
if(strcmp(student[i].lendbook,lendbook)==0) /*借阅了该书,进入下一循环,否则出错显示*/
{
fclose(fp);
fp=fopen("record.txt","r");
fp2=fopen("bookl.txt","w");
for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++)
{
if(strcmp(student[i].lendbook,lendbook)==0)
{
continue; /*删除还掉的书的借书记录*/
}
fwrite(&student[i],sizeof(struct student),1,fp2); /*写入原来没还的书的记录*/
}
fclose(fp);
fcl

ose(fp2);
fp=fopen("record.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&student[i],sizeof(struct student),1,fp2)!=0;i++)
{
fwrite(&student[i],sizeof(struct student),1,fp); /*将借书记录信息写回*/
}
fclose(fp);
fclose(fp2);
fopen("bookl.txt","w"); /*清临时文件的记录*/
fclose(fp2);
fp=fopen("book.txt","r");
fp2=fopen("bookl.txt","w");
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++) /*将书的记录写入临时文件,防止因为修改信息破坏以前的记录*/
{
if(i==n)
{
book[i].turefalse=1;
fwrite(&book[i],sizeof(struct book),1,fp2); /*将还的书的原来状态设为无人借阅的*/
continue;
}
fwrite(&book[i],sizeof(struct book),1,fp2);
}
fclose(fp);
fclose(fp2);
fp=fopen("book.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++)
{
fwrite(&book[i],sizeof(struct book),1,fp); /*将临时文件写回*/
}
fclose(fp);
fclose(fp2);
fopen("bookl.txt","w"); /*清临时文件*/
fclose(fp2);
printf("还书完毕,按任意键返回\n");
getch();
return 1;
}
}
printf("你没有借这样的书,任意键返回\n"); /*出错提示*/
fclose(fp);
getch();
return 0;
}
}
printf("系统没这样的卡,和管理员联系,按任意键返回\n"); /*出错提示*/
fclose(fp);
getch();
}


findbook()
{
FILE *fp;
char bookname[10];
int ture,i;
fp=fopen("book.txt","r");
printf("请输入你要查找的书名\n");
scanf("%s",bookname);
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(strcmp(bookname,book[i].bookname)==0)
{
if(book[i].turefalse==1)
{
printf("这本书的详细资料是:%d %s %s 此书现在无人借阅\n按任意键返回\n",book[i].booknum,book[i].bookname,book[i].bookcreat);
}
else {printf("这本书已经有人借出\n");fclose(fp);return 0;}
fclose(fp);
return FALSE;
}
}
printf("没有你要查询的书籍\n");
fclose(fp);
return FALSE;
}


findbook1()
{
FILE *fp;
char bookcreat[10];
int ture,i;
fp=fopen("book.txt","r");
printf("请输入你要查找的作者名\n");
scanf("%s",bookcreat);
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(strcmp(bookcreat,book[i].bookcreat)==0)
{
if(book[i].turefalse==1)
{
printf("这本书的详细资料是:%d %s %s 此书现在无人借阅\n按任意键返回\n",book[i].booknum,book[i].bookname,book[i].bookcreat);
}
else {printf("这本书已经有人借出\n");fclose(fp);return 0;}
fclose(fp);
return FALSE;
}
}
printf("没有你要查询的书籍\n");
fclose(fp);
return

FALSE;
}



lendcount()
{
FILE *fp;
int i,n=0;
fp=fopen("record.txt","r");
for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++)
{
printf("卡号:%d 借出的书籍:%s \n",student[i].carnum,student[i].lendbook);
n=n+1;
}
fclose(fp);
printf("目前共有%d本书借出\n",n);
printf("按任意键\n");
getch();
return n;
}



chabook()
{
char ch5;
do
{
printf("---------------欢迎进入图书查询系统!--------------\n");
printf(" 1:<按书名查找>\n");
printf(" 2:<按作者查找>\n");
printf(" 0:<返回>\n");
printf("请输入0--2,其他输入非法!\n");
scanf("%s",&ch5);
switch(ch5)
{
case '1':findbook();getch();break;
case '2':findbook1();getch();break;
case '0':break;
default:printf("无此操作\n");getch();break;
}
}while(ch5!='0');
return FALSE;
}


lendbook()
{
FILE *fp,*fp2;
int i,n;
int carnum;
printf("请你输入你的卡号\n");
scanf("%d",&carnum);
fp=fopen("car.txt","r");
for(i=0;fread(&car[i],sizeof(struct car),1,fp)!=0;i++)
{
if(car[i].carnum==carnum)
{
n=i;
fclose(fp);
printf("请输入你要借阅的书的名字\n");
scanf("%s",student[n].lendbook);
fp=fopen("book.txt","r");
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(strcmp(book[i].bookname,student[n].lendbook)==0)
{
if(book[i].turefalse==0) {printf("对不起,此书有人借出,请借其他书\n");fclose(fp);getch();return;}
else
fclose(fp);
fp=fopen("record.txt","a+");
student[n].carnum=carnum;
fwrite(&student[n],sizeof(struct student),1,fp);
fclose(fp);
fp=fopen("book.txt","r");
fp2=fopen("bookl.txt","w");
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(strcmp(book[i].bookname,student[n].lendbook)==0)
{
book[i].turefalse=0;
fwrite(&book[i],sizeof(struct book),1,fp2);
continue;
}
fwrite(&book[i],sizeof(struct book),1,fp2);
}
fclose(fp);
fclose(fp2);
fp=fopen("book.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++)
{
fwrite(&book[i],sizeof(struct book),1,fp);
}
fclose(fp);
fclose(fp2);
fopen("bookl.txt","w");
fclose(fp2);
printf("借书完毕,按任意键返回\n");
getch();
return;
}
}
printf("不存在这样的书,任意键返回\n");
fclose(fp);
getch();
return;
}
}
printf("你的卡号不存在,请申请新卡,按任意键返回\n");
fclose(fp);
getch();
}


carcount()
{
FILE *fp;
int i,n=0;
fp=fopen("car.txt","r");
for(i=0;fread(&car[i],sizeof(struct car),1,fp)!=0;i++)
{
printf("第%d张卡<卡号:%d 姓名:%s 班

级:%d>\n",i+1,car[i].carnum,car[i].studentname,car[i].studentclass);
n=n+1;
}
fclose(fp);
printf("目前共有%d本书\n",n);
printf("按任意键\n");
getch();
}


delcar()
{
FILE *fp,*fp2;
int i;
int carnum;
char choice;
fp=fopen("car.txt","r");
fp2=fopen("bookl.txt","w");
printf("请输入你要删除的卡号\n");
printf("如果你输入的卡号存在,系统自动删除该信息!如果不存在,系统不做任何改动\n");
scanf("%d",&carnum);
for(i=0;fread(&car[i],sizeof(struct car),1,fp)!=0;i++)
{
if(car[i].carnum!=carnum)
{
fwrite(&car[i],sizeof(struct car),1,fp2);
}
}
fclose(fp);
fclose(fp2);
printf("是否真的要删除该卡?删除后该书籍的所有信息将无法恢复《Y/N》\n");
scanf("%s",&choice);
if(choice=='y'||choice=='Y')
{
fp=fopen("car.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&car[i],sizeof(struct car),1,fp2)!=0;i++)
{
fwrite(&car[i],sizeof(struct car),1,fp);
}
fclose(fp);
fclose(fp2);
fp2=fopen("bookl.txt","w");
fclose(fp2);
printf("按任意键返回\n");
getch();
return;
}
else
{
printf("按任意键返回\n");
getch();
return;
}
}


addcar()
{
FILE *fp;
int i=0;
fp=fopen("car.txt","a+");
printf("请你输入卡号\n");
scanf("%d",&car[i].carnum);
printf("请你输入学生姓名\n");
scanf("%s",car[i].studentname);
printf("请你输入班级\n");
scanf("%d",&car[i].studentclass);
fwrite(&car[i],sizeof(struct car),1,fp);
fclose(fp);
printf("输入完毕,任意键返回\n");
getch();
}




c语言:程序要求包括:
1. 算法分析:排序、查找、其它;
2. 主要流程图
①写程序结构及各模块(输入,显示等)结构图;
②写主要算法的流程图;
3. 程序源代码 :列出源程序清单及说明;
4. 测试及输出结果 :输入信息、输出信息;




#include
#include
#include
#include
#include
#define STACK_INIT_SIZE 10
#define OK 1
#define TRUE 1
#define FALSE 0
#define ERROR 0


struct student /*定义学生类型,用于存放借出的书籍*/
{
int studentnum,phonenum;
char lendbook[10];
}student[1000];

struct book /*定义书的类型*/
{
char bookname[11];
char publisher[20];
char page;
char year[6];
char status[4];
char name[11];
char author[51];
char booknum;
char bookcreat[10];
char borrownum;
char turefalse; /*用于借书和还书模块判断一本书是否借出的条件*/
}book[1000];

struct car /*借书卡的数据类型*/
{
int carnum;
char studentname[10];
int studentclass;
int studentphone;
}car[100];





addcar()
{
FILE *fp;
int i=0;
double allnum,stillbook,outbook,allmoney,avemoney;
fp=fopen("car.txt","a+");
printf("请你输入学生姓名\n");
scanf("%s",car[i

].studentname);
printf("请你输入班级\n");
scanf("%d",&car[i].studentclass);
fwrite(&car[i],sizeof(struct car),1,fp);
fclose(fp);
printf("注册完毕,任意键返回\n");
fp=fopen("book.txt","r");
avemoney=allmoney/allnum;
fclose(fp);
printf("书籍总数:%ld,已借出的书籍:%ld,在馆的书籍:%ld,书籍贯总金额:%ld,书籍平均价格:%ld",
stillbook,outbook,allmoney,avemoney);
getch();
}



carcount()
{
FILE *fp;
int i,n=0;
fp=fopen("car.txt","r");
for(i=0;fread(&car[i],sizeof(struct car),1,fp)!=0;i++)
{
printf("第%d张卡<卡号:%d 姓名:%s 班级:%d 手机号码:%d>\n",
i+1,car[i].carnum,car[i].studentname,car[i].studentclass,car[i].studentphone);
n=n+1;
}
fclose(fp);
printf("目前共有%d本书\n",n);
printf("按任意键\n");
getch();
}










void findbook()
{
FILE *fp;
char bookname[10];
int ture,i,booknum;
fp=fopen("book.txt","r");
printf("请输入你要查找的booknum");
scanf("%d",&booknum);
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(strcmp(booknum,book[i].booknum)==0)
{
if(book[i].turefalse==1)

printf("这本书的详细资料是:%d %s %s 此书现在无人借阅\n按任意键返回\n",book[i].booknum,book[i].bookname,book[i].bookcreat);

else {printf("这本书已经有人借出\n");fclose(fp);return 0;}

fclose(fp);
return FALSE;
}
else
printf("没有你要查询的书籍\n");
fclose(fp);}
return FALSE;
}




void borrowbook(struct book *m) //借阅图书函数
{
int num;
struct book *b, *b1;

printf("输入要借书的编码:");
scanf("%d",&num);

b = searchbook(num); /*调用查找图书结点函数*/

if(b != NULL)
{
if(m->borrownum < 10)
{
// b->status = '0';

// b1 = &m->book[m->borrownum];

strcpy(b1->name,b->name);
strcpy(b1->author,b->author);
b1->booknum = b->booknum;
strcpy(b1->year,b->year);
b1->page = b->page;
strcpy(b1->publisher,b->publisher);
// b1->price = b->price;
// b1->status = b->status;
m->borrownum++;

printf("%s借书成功!",b->name);
getch();
}
else
{
printf("你已借满10本书.");
getch();
}
}
else
{
printf("没有你要借的书.");
getch();
}

}






huanbook() /*还书函数*/
{
FILE *fp,*fp2; /*定义两个文件指针,fp2用于修改数据时设立临时文件用,防止数据遭破坏*/
int i,n;
int carnum,booknum;
char lendbook[10];
printf("请你输入你的卡号\n");
scanf("%d",&carnum);
fp=fopen("car.txt","r"); /*读取卡号记录*/

{
if(car[i].carnum==carnum) /*卡号存在,进入下一循环*/
{
n=i;
fclose(fp);
printf("请输入你要还的书的booknum\n");
scanf("%d",&booknum);
fp=fopen("record.txt","r");
for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++) /*判

断是否借阅了输入的书*/
{
if(strcmp(student[i].lendbook,lendbook)==0) /*借阅了该书,进入下一循环,否则出错显示*/
{
fclose(fp);
fp=fopen("record.txt","r");
fp2=fopen("bookl.txt","w");
for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++)
{
if(strcmp(student[i].lendbook,lendbook)==0)
{
continue; /*删除还掉的书的借书记录*/
}
fwrite(&student[i],sizeof(struct student),1,fp2); /*写入原来没还的书的记录*/
}
fclose(fp);
fclose(fp2);
fp=fopen("record.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&student[i],sizeof(struct student),1,fp2)!=0;i++)
{
fwrite(&student[i],sizeof(struct student),1,fp); /*将借书记录信息写回*/
}
fclose(fp);
fclose(fp2);
fopen("bookl.txt","w"); /*清临时文件的记录*/
fclose(fp2);
fp=fopen("book.txt","r");
fp2=fopen("bookl.txt","w");
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++) /*将书的记录写入临时文件,防止因为修改信息破坏以前的记录*/
{
if(i==n)
{
book[i].turefalse=1;
fwrite(&book[i],sizeof(struct book),1,fp2); /*将还的书的原来状态设为无人借阅的*/
continue;
}
fwrite(&book[i],sizeof(struct book),1,fp2);
}
fclose(fp);
fclose(fp2);
fp=fopen("book.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++)
{
fwrite(&book[i],sizeof(struct book),1,fp); /*将临时文件写回*/
}
fclose(fp);
fclose(fp2);
fopen("bookl.txt","w"); /*清临时文件*/
fclose(fp2);
printf("还书完毕,按任意键返回\n");
getch();
return 1;
}
else
printf("你没有借这样的书,任意键返回\n");}/*出错提示*/
fclose(fp);
getch();
return 0;
}
else
printf("系统没这样的卡,和管理员联系,按任意键返回\n");}/*出错提示*/
fclose(fp);
getch();
}




void main()
{
struct book *m;
char ch5;
do
{
printf("---------------欢迎进入图书查询系统!--------------\n");
printf(" 1:<注册卡号>\n");
printf(" 2: <卡号信息>\n");
printf(" 3:<按书籍编号查找>\n");
printf(" 4: <借书>\n");
printf(" 5: <还书>\n");
printf(" 0:<返回>\n");
printf("请输入0--5,其他输入非法!\n");
scanf("%s",&ch5);
switch(ch5)
{
case '1':addcar();getch();
case '2':carcount();getch();break;
case '3':findbook();getch();break;
case '4':borrowbook(m );getch();break;
case '5':huanbook();getch();break;
case '0':break;
default:printf("无此操作\n");getch();break;
}
}while(ch5!='0');
//return FALSE;
}



相关文档
最新文档