对于我们大一的新生来说写一个管理类程序确实很难,但是这个“难”不再“思维”,而在“综合”。你如果坚持把这个管理系统写完你就会发现他不难都是基础的知识,但是很杂、综合性很高。尽管没有思维上的难度,一个又杂又大综合性高的程序让一个大一的小白来写自然会感到很难。
我的C语言是直接从函数开始学,前面的没学都是后来自己补的。开始面对这个大程序我也放弃过,大概中断了将近2个月。但是后来我还是坚持把他给弄完了。一定要坚持。
另外说一下,我的C语言不是很好,写的很低级。如有不足请多包涵
(程序不连贯每完成一项后需要重新开始)
3.15 图书借阅管理系统设计(难度系数:5级)
【任务描述】
编写一个图书信息管理系统,对我校的图书信息进行管理,并实现借书、还书功能。
【功能要求】
(1)管理员功能
图书信息管理:图书信息包括:编号、书名、作者名、分类号、出版单位、出版时间、库存数量,价格等。可对图书进行添加、删除、修改、查询、保存、浏览等操作。
读者信息管理:读者信息包括:编号,借阅号,姓名,最大借阅额度,已借阅数量,读者密码。可对读者信息进行添加、删除、修改、查询、保存、浏览等操作。
提供多种形式的查询:如按书名,按作者名,按出版单位,按出版时间等进行查询。
借阅信息查询:可按图书、按读者、按作者等,查询相关的借书信息。
还书信息查询:可按图书、按读者、按作者等,查询相关的还书信息。
(2)读者功能
图书查询功能
借书功能:读者登录后,选择借书功能。系统可查看是否允许借阅。如果允许借阅,进行图书借阅操作:在借阅表中添加新记录,修改库存,修改读者相关信息。
还书功能:读者登录后,选择还书功能。系统查看图书是否超期。超期图书需支付相应费用。在还书表中添加新记录,修改库存,修改读者相关信息。
读者密码维护
(3)设计提示
管理员、读者分别用密码登录,分别完成不同的操作。
重点 3个stand函数
他们的作用是把文件中的信息转到链表;
head = stand(fp);
r_head = r_stand(cp);
l_head = l_stand(rp);
只要将这三个函数搞明白剩下的一切就不攻自破;
管理员密码 :255426331
造作说明
1.先进行管理员登录
2.进入图书信息管理添加图书
3进入读者信息管理添加读者
这之后就可以随便玩了-------------------------------------
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
struct book
{
long int bian_name;//编号
char book_name[50];//书名
char author[50];//作者名
char classification_number[10];//分类号
char Publisher[20];//出版社
char Publication_date[20];//出版日期
int Inventory_quantity;//库存数量
float Price;//价格
struct book *next;
};
struct reader
{
long int re_numbering;//读者编号
long int borrowing_number;//借阅号
char re_name[20];//读者
int Maximum_borrowing;//最大借阅量
int borrow_have;//以借书籍量
char re_code[20];//密码
struct reader *next;
};
struct lend//借书的结构体
{
char p_name[20];//借阅人名
char b_name[20];//借的书的名字
int l_year; //还书日期
int l_month;
int l_day;
int b_year;//借书日期
int b_month;
int b_day;
int judgment;//判断1为还书 0为借书
struct lend *next;
};
void menu();//总菜单
//管理员系统
//(1)图书信息
void intendant(FILE *fp,FILE *cp,FILE *rp,struct book *head, struct reader *r_head, struct lend *l_head);//管理者系统
struct book *stand(FILE *fp);//将图书文件信息转到链表 关键
void add(FILE *fp);//添加图书信息
void browse(struct book *head);//浏览图书信息
void erase(FILE *fp,struct book *head);//删除图书信息
void in_file(FILE *fp,struct book *head);//存入图书信息
void revise(FILE *fp,struct book *head);//修改图书信息
void view(struct book *head);
//(2)读者信息
struct reader *r_stand(FILE *cp);//将读者信息导入链表 关键
void r_add(FILE *cp);//添加读者信息
void r_browse(struct reader *r_head);//浏览读者信息
void r_erase(FILE *cp,struct reader *r_head);//删除信息
void r_in_file(FILE *cp,struct reader *r_head);//存入读者信息
void r_revise(FILE *cp,struct reader *r_head);//修改读者信息
void r_view(struct reader *r_head);//查看读者信息
//(3)借书查询
void find1(struct lend *l_head);//按图书查找借书信息
void find2(struct lend *l_head);//按读者查找借书信息
void find3(struct lend *l_head,struct book *head);//按作者查找借书信息
//(4)还书查询
void find11(struct lend *l_head);//按图书查找还书信息
void find22(struct lend *l_head);//按读者查找还书信息
void find33(struct lend *l_head,struct book *head);//按作者查找还书信息
//读者系统
void logs(struct reader *r_head);//读者登录
struct lend *l_stand(FILE *rp);//将借阅信息导入链表 关键
void re_login(FILE *fp,FILE *cp,FILE *rp,struct book *head, struct reader *r_head, struct lend *l_head);//读者系统
void borrow_books(FILE *fp,FILE *cp,FILE *rp,struct book *head,struct reader *r_head,struct lend *l_head);//借书系统
void return_books(FILE *fp,FILE *cp,FILE *rp,struct book *head,struct reader *r_head,struct lend *l_head);//还书系统
void maintenance(struct reader *r_head,FILE *cp);//修改密码
void Check_again(char name[20],struct lend *l_head);//借书查重
int Overage_billing(int x,int y,int z,int s,int k,int t);//检查是否超期借阅
void penalty(int j);//超期借阅的罚款
struct reader *now;
void main()
{
FILE *fp, *cp, *rp;
struct book *head;
struct reader *r_head;
struct lend *l_head;
if((fp = fopen("图书信息","a+"))==NULL)
{
printf("can not open the file!\n");
exit(0);
}
if((cp = fopen("读者信息","a+"))==NULL)
{
printf("can not open the file!\n");
exit(0);
}
if((rp = fopen("借书信息","a+"))==NULL)
{
printf("can not open the file!\n");
exit(0);
}
head = stand(fp); //基石 文件——————>链表
r_head = r_stand(cp); //基石 文件——————>链表
l_head = l_stand(rp); //基石 文件——————>链表
int order;
menu();
printf("\n请输入对应功能前的序号:");
scanf("%d",&order);
switch(order)
{
case 1:
re_login(fp,cp,rp,head, r_head, l_head);//读者系统
break;
case 2:
intendant(fp,cp,rp,head, r_head, l_head);//管理者系统
break;
default:
printf("\t\t指令输入错误!\n\t\t已自动结束程序!");
exit(0);
}
fclose(fp);
fclose(cp);
fclose(rp);
}
void menu()
{
printf("\nC语言结课设计 \n");
printf("学生:XX \n");
printf("学号:XXXXXXXXXXXX \n\n");
printf("\t\t*****************************************\n");
printf("\t\t*****************************************\n");
printf("\t\t 图书管理系统(5级) \n");
printf("\t\t 1.读者登录 \n");
printf("\t\t 2.管理者登录 \n");
printf("\t\t*****************************************\n");
printf("\t\t*****************************************\n");
}
void intendant(FILE *fp,FILE *cp,FILE *rp,struct book *head, struct reader *r_head, struct lend *l_head)
{
int order2,order3;
char use_password[20];
printf("\n请输入登录密码:\n");
scanf("%s",use_password);
if(strcmp(use_password,"255426331")==0)
{
printf("登陆成功!\n\n");
printf("\t\t***********************\n");
printf("\t\t***********************\n");
printf("\t\t 1.图书信息管理\n");
printf("\t\t 2.读者信息管理\n");
printf("\t\t 3.借阅信息查询\n");
printf("\t\t 4.还书信息查询\n");
printf("\t\t***********************\n");
printf("\t\t***********************\n\n");
printf("\n请输入对应功能前的序号:");
scanf("%d",&order2);
switch(order2)
{
case 1:
printf("\t\t************************\n");
printf("\t\t************************\n");
printf("\t\t 1.添加图书信息\n");
printf("\t\t 2.浏览图书信息\n");
printf("\t\t 3.删除图书信息\n");
printf("\t\t 4.修改图书信息\n");
printf("\t\t 5.查看图书信息\n");
printf("\t\t************************\n");
printf("\t\t************************\n\n");
printf("\n请输入对应功能前的序号:");
scanf("%d",&order3);
switch(order3)
{
case 1:
add(fp);
break;
case 2:
browse(head);//浏览
break;
case 3:
erase(fp,head);//删除
break;
case 4:
revise(fp,head);//修改
break;
case 5:
view(head);//查看
break;
default:
printf("\t\t指令输入错误!\n\t\t已自动结束程序!");
exit(0);
}
break;
case 2:
printf("\t\t******************************\n");
printf("\t\t******************************\n");
printf("\t\t 1.添加读者信息\n");
printf("\t\t 2.浏览读者信息\n");
printf("\t\t 3.删除读者信息\n");
printf("\t\t 4.修改读者信息\n");
printf("\t\t 5.查看读者信息\n");
printf("\t\t******************************\n");
printf("\t\t******************************\n\n");
printf("\n请输入对应功能前的序号:");
scanf("%d",&order3);
switch(order3)
{
case 1:
r_add(cp);//添加
break;
case 2:
r_browse(r_head);//浏览
break;
case 3:
r_erase(cp,r_head);//删除
break;
case 4:
r_revise(cp,r_head);//修改
break;
case 5:
r_view(r_head);//查看
break;
default:
printf("\t\t指令输入错误!\n\t\t已自动结束程序!");
exit(0);
}
break;
case 3:
//图书、按读者、按作者
printf("\t\t********************\n");
printf("\t\t1.按图书查找借阅信息\n");
printf("\t\t2.按读者查找借阅信息\n");
printf("\t\t3.按作者查找借阅信息\n");
printf("\t\t********************\n\n&#