简略文件数据库-模仿图书馆管理系统
波及知识点:文件读写、内存治理、构造体定义、根本数据结构、高级格式化输入输出
要求:编写一个程序模仿图书管理系统。
用户分为管理员和读者两类,别离显示不同文本格式菜单,通过菜单项对应数字进行抉择。
读者菜单包含借书、还书、查问等性能。
管理员菜单包含图书和读者信息录入、批改和删除。
图书信息至多应包含:编号、书名、数量。
读者信息至多应包含:编号、姓名、所借图书。
可依据图书名称或编号进行图书信息查问,可查问某本书当初被哪些读者借走。
命令行参数如下:
Libsim –a(-u) xxxx
第一个参数为可执行程序名称;
第二个参数为用户身份,-a示意管理员,-u示意读者;
第三个参数为用户名
几个函数阐明:
展现读者和图书信息
void ShowBook(char* bname);
void ShowReader(char* rname);
图书借阅和偿还
void BookLend(char *rname, char *bname);
void BookReturn(char *rname, char* bname);
图书和读者信息增删
void AddBook(char* bname);
void DelBook(char* bname);
void AddReader(char* rname, char* reroot);
void DelReader(char* rname);
读取读者,管理员和图书信息
void ReadBooksInfo();
void ReadReadersInfo();
void ReadAdministratorsInfo();
更新读者,管理员和图书信息
void UpdateBorrowerList();
void UpdateBorrowedBookList();
void UpdateBookleft();
void UpdateBooks();
void UpdateReaders();
void UpdateAdministrators();
void UpdateReroots();
void UpdateAdroots();
图书馆信息:
信息编写规定:
每个文件以end作为结尾
而null示意该书或读者曾经被删除
books.txt:
每行一本书,第一行的书编号为1
readers.txt:
每行一个读者姓名,第一行的读者编号为1
administrators.txt:
每行一个管理员姓名,第管理员一行的读者编号为1
books'borrowers.txt:
每行若干个人名,第一行对应编号为1的书的借阅人
borrowers'books.txt:
每行若干个书名,第一行对应编号为1的人的在借书
reroots.txt:
每行一个明码,第一行对应编号为1的读者的明码
adroots.txt
每行一个明码,第一行对应编号为1的管理员的明码
源码(不蕴含函数局部)
#include<stdio.h>
#include<string.h>
typedef struct Book{
char name[20];//名称
int num; //编号
int left; //库存
}Book;
typedef struct Reader{
char name[20];//姓名
int num; //编号
char root[20];//明码
}Reader;
typedef struct Administrator{
char name[20];//姓名
int num; //编号
char root[20];//明码
}Administrator;
Book books[110]; //图书信息
Reader readers[110]; //读者信息
Administrator administrators[10]; //管理员信息
char borrowerList[110][100]; //图书在借人
char borrowedBookList[110][100]; //读者在借书
void ShowBook(char* bname);
void ShowReader(char* rname);
void BookLend(char *rname, char *bname);
void BookReturn(char *rname, char* bname);
void ReadBooksInfo();
void ReadReadersInfo();
void ReadAdministratorsInfo();
void UpdateBorrowerList();
void UpdateBorrowedBookList();
void UpdateBookleft();
void UpdateBooks();
void UpdateReaders();
void UpdateAdministrators();
void UpdateReroots();
void UpdateAdroots();
void AddBook(char* bname);
void DelBook(char* bname);
void AddReader(char* rname, char* reroot);
void DelReader(char* rname);
//Libsim –a(-u) xxxx
//第一个参数为可执行程序名称;第二个参数为用户身份,-a示意管理员,-u示意读者;第三个参数为用户名
int main(int argc, char *argv[]) {
ReadBooksInfo();
ReadReadersInfo();
ReadAdministratorsInfo();
char *command = argv[1], *name = argv[2];
printf("Hello, %s! Welcome to XDULibrary!\n", name);
if(!strcmp(command, "-a")){
char root[10];
printf("Please enter your root:\n");
scanf("%s", root);
int i, flag = 0, choice;
for(i = 0; i < 10; i++)
if(!strcmp(administrators[i].root, root)) flag = 1;
if(!flag){
printf("wrong root\n");
return -1;
}
printf("0.exit\n1.show books\n2.show readers\n3.delete readers\n4.delete books\n5.add readers\n6.add books\n");
while (1) {
printf("please choose what to do:\n");
scanf("%d", &choice);
if (choice == 0){
printf("exit successfully");
return 0;
}
switch(choice){
case 1:{
char bname[20];
printf("please enter book's name:\n");
scanf("%s", bname);
ShowBook(bname);
break;
}
case 2:{
char rname[20];
printf("please enter reader's name:\n");
scanf("%s", rname);
ShowReader(rname);
break;
}
case 3:{
char rname[20];
printf("please enter reader's name:\n");
scanf("%s", rname);
DelReader(rname);
break;
}
case 4:{
char bname[20];
printf("please enter book's name:\n");
scanf("%s", bname);
DelBook(bname);
break;
}
case 5:{
char rname[20], reroot[20];
printf("please enter reader's name:\n");
scanf("%s", rname);
printf("please enter reader's root:\n");
scanf("%s", reroot);
AddReader(rname, reroot);
break;
}
case 6:{
char bname[20];
printf("please enter book's name:\n");
scanf("%s", bname);
AddBook(bname);
break;
}
default:{
printf("illegal input\n");
break;
}
}
}
}
else if (!strcmp(command, "-u")){
char root[10];
printf("Please enter your root:\n");
scanf("%s", root);
int i, flag = 0, choice;
for(i = 0; i < 10; i++){
if(!strcmp(readers[i].root, root)) flag = 1;
}
if(!flag){
printf("wrong root\n");
return -1;
}
printf("0.exit\n1.show books\n2.show readers\n3.lend books\n4.return books\n");
while (1) {
printf("please choose what to do:\n");
scanf("%d", &choice);
if (choice == 0){
printf("exit successfully");
return 0;
}
switch(choice){
case 1:{
char bname[20];
printf("please enter book's name:\n");
scanf("%s", bname);
ShowBook(bname);
break;
}
case 2:{
char rname[20];
printf("please enter reader's name:\n");
scanf("%s", rname);
ShowReader(rname);
break;
}
case 3:{
char bname[20];
printf("please enter book's name:\n");
scanf("%s", bname);
BookLend(name, bname);
break;
}
case 4:{
char bname[20];
printf("please enter book's name:\n");
scanf("%s", bname);
BookReturn(name, bname);
break;
}
default:{
printf("illegal input\n");
break;
}
}
}
}
else{
printf("illegal input\n");
return -1;
}
return 0;
}
//编写函数的地位:
…………………………………………
…………………………………………
须要残缺源码可移步评论区留言,一键三连是对创作者最大的激励~
或者能够间接在github或gitee进行clone,后续若发现程序有问题,会进行版本更新。
https://gitee.com/jiang-zhihang/library-system.git
https://github.com/akynazh/LibrarySystem.git
over!
发表回复