[技术]编程日记(2)——《图书管理系统》程序设计

QQ截图20151222220916

一、需求分析

经过分析之后可知,该系统的功能主要有新书入库、旧书出库、新增读者

删旧读者、借书登记、还书管理、保存与读取信息、输出全部信息、现存不足图书和查询。故可将其分为10个函数。查询、借阅均使用图书号或图书名进行检索。

 

1.新书入库函数:将新书的信息写入系统。

2.旧书出库函数:将旧书的信息从系统中删除

3.新增读者函数:将新读者的信息写入系统。

4.删旧读者函数:将旧读者的信息从系统中删除。

5.借书登记函数:将书的库存减少,并记下借阅者。

6.还书管理函数:将书归还,借阅者清空。

7.保存与读取信息函数:将读者、图书、借阅信息写入磁盘中的.txt文件中。

8.输出全部信息函数:将所写入的信息全部输出。

9.现存不足图书函数:将所有库存为0的图书输出。

10.查询函数:通过图书名或图书ID来查询图书。

 

通过结构体来定义图书与读者。图书管理信息包括:图书ID、图书名、图书作者、价格、册书。读者信息包括:读者号、读者名

二、程序流程图

总体结构:

QQ截图20160101184346

借书登记(查询):

QQ截图20160101184825

新书入库(新增读者)

 

QQ截图20160101185235

 

 

 

 

 

 

 

 

 

 

 

 

 

QQ截图20160101185307

 

 

 

 

 

 

 

 

 

 

 

三、核心技术的实现说明及相应程序段

主要功能有:

void left();         /*退出系统*/

void welcome();      /*欢迎界面*/

void function_list();    /*功能表*/

void book_new();     /*新书入库*/

void book_del();     /*旧书出库*/

void user_new();     /*新增读者*/

void user_del();     /*删旧读者*/

void borrow_book();  /*借书登记*/

void return_book();  /*还书管理*/

void not_enough();       /*现存不足*/

void search();           /*查询*/

void print_all();    /*输出全部信息*/

void save_all();     /*保存当前信息*/

void save();         /*保存*/

void load();         /*读取数据*/

void about();        /*关于系统*/

子功能有:

void page_head2();       /*表头2*/

void page_head3();       /*表头3*/

void show_book(int); /*展示一本书*/

void show_user(int); /*展示一个读者*/

int book_num = -1;       /*初始化书的数量*/

int user_num = -1;       /*初始化读者数量*/

void input_book(int);    /*读入一本书*/

int find_book(long); /*寻找那个书*/

int find_book2(char *);/*用书名找那个书*/

int find_user(long); /*寻找那个读者*/

int find_user2(char *);/*用读者名找那个读者*/

void back_list();    /*回到功能表*/

其中,值得一提的是我们的save()函数与find_book等函数。

1.保存数据函数 save()

void save(){      /******保存******/

FILE *fp1,*fp2;

int i;

if((fp1 = fopen(“books.txt”,”wb”)) == NULL){

printf(“无法打开文件!\n”);

return;

}

for(i = 0;i < book_num + 1; i++)

if(fwrite(&book[i],sizeof(books),1,fp1)!=1)

printf(“文件写入错误!\n”);

fclose(fp1);

if((fp2 = fopen(“users.txt”,”wb”)) == NULL){

printf(“无法打开文件!\n”);

return;

}

for(i = 0;i < user_num + 1; i++)

if(fwrite(&user[i],sizeof(users),1,fp2)!=1)

printf(“文件写入错误!\n”);

fclose(fp2);

}

我们将读者信息与图书信息分开存放。

 

2.读取信息函数 load()

void load(){      /******读取******/

FILE *fp1,*fp2;

int i,j;

if((fp1 = fopen(“books.txt”,”rb”)) == NULL){

printf(“无法打开文件!\n”);

return;

}

for(i = 0;i<1000;){

if(fread(&book[i],sizeof(books),1,fp1) == 1)

i++;

else

break;

}

book_num = i – 1;

fclose(fp1);

if((fp2 = fopen(“users.txt”,”rb”)) == NULL){

printf(“无法打开文件!\n”);

return;

}

for(j = 0;j < 10;){

if(fread(&user[j],sizeof(users),1,fp2) == 1)

j++;

else

break;

}

user_num = j – 1;

fclose(fp2);

}

这里要注意,读取时并不是一次直接读取数个结构体,而是一个一个结构体分别读取;同时for循环中的第三部分是空的,因为要判断数据读取成功时才让j+1,最后就能得到图书与读者的数目。

 

3.子功能查询读者/图书函数 find_user() find_user2()

find_book()find_book2()

 

举例:find_book()   用图书ID来寻找图书。

int find_book(long id){

int n;

for(n = 0;n <= book_num;n++){

if(book[n].book_ID == id)

return n;

}

return -1;

}

将所输入的ID号与结构体中存放的ID进行比对,比对成功则输出结构体的位置,从而完成寻找的目的。

举例:find_book2()

int find_book2(char *p){/****用书名找那个书****/

int n;

for(n = 0;n <= book_num;n++){

if(strcmp(p,book[n].book_name) == 0)

return n;

}

return -1;

}

将所输入的图书名通过strcmp与结构体中的字符串进行比对。

四、课设总结

经过一周的努力,这个简单的图书管理系统终于完成了。一开始我们想不参考其他的源码,独立完成这个程序,但是一直无法解决图书数目如何存入文件汇总。最后我们还是参考了其他人的源码,从中学到了很多新的算法,如,通过判定结构体是否有数据来进行计数从而获得图书数与读者数。然后通过while(1)的无限循环来满足输入出错重新输入的效果。然后,借书还书操作与输出表的表格都是我们自己做的,不断地调试终于完成。虽然简单,但是也是我们的心血。

五、参考文献

一个从同学那里得到的学生管理系统。

六、源代码

链接:http://pan.baidu.com/s/1qX2YEKW  密码:lb59

 

 

 

 

 

 

评论已关闭。