c语言 图书管理系统

一、目的
通过设计一个图书管理系统的程序,全面运用课程的主要知识点,巩固对模块化程序设计、文件操作的理解,提高软件编程能力。
二、涉及的知识点
循环、分支语句、函数、数组、函数、结构体、指针、链表、文件读取操作等等
三、程序已经实现的功能点(用100-200字进行说明)
(1)程序具有以下功能,操作流程见下图:
登录界面:
输入用户名(admin)、密码(20190611),只有用户名、密码同时正确(信息存放在文件中)才能进入系统主菜单,否则需要重新输入用户名、密码。(同时输入3次错误将退出程序)。
操作功能:分为7个功能:输入1进行图书入库,输入2进行修改信息,输入3进行删除信息,输入4进行图书查询,输入5进行图书总览,输入6进行退出软件,输入7进行修改密码;
在这里插入图片描述
修改信息:输入对应的书名与编号,然后进行相应的修改。

删除信息:输入对应的编号,然后在确认删不删除。如果输入对应的编号不对,则可重新检索和返回主菜单,之后可返回主菜单;
图书查询:输入1进行书名查询,输入2进行作者查询,输入3进行登录号查询,输入4进行出版社查询,输入5进行模糊查询,查询信息与已有信息符合进入图书总览。输入0返回主菜单;
图书总览:可查看已录入的全部书籍信息;
退出软件:退出图书管理信息系统;
修改密码:先输入旧密码,旧密码正确再连续输入两次新密码(两次输入结果完全相同)后,新密码取代旧密码,并存放到帐户信息文件中,之后跳到登陆界面重新登陆。如果旧密码不对则可返回主菜单;
(2)定义如下结构体类型:
“用户名”结构体user:成员有:账号,密码;
“图书信息”结构体BOOK:成员有:number(登录号)、name(书名)、author(作者名)、type(类型)、publish(出版单位)、time(出版时间)、price(价格)、num(数量);
(3)帐户信息存放在name.txt文件,图书信息记录保存在mybook中;
(4)采用模块化程序设计方法来实现,即main()显示主菜单、调用相关函数实现相应功能,起主控作用。
(5)附加功能:
用户连续输错密码的次数超过3次,将退出程序;
四、程序运行截图及说明(要求对每幅图做简要说明,每图限50到100字)
登录界面:
输入用户名(admin)、密码(20190611),只有用户名、密码同时正确(信息存放在文件中)才能进入系统主菜单,否则需要重新输入用户名、密码。(同时输入3次错误将退出程序)。如图所示:
在这里插入图片描述
操作功能:分为7个功能:输入1进行图书入库,输入2进行修改信息,输入3进行删除信息,输入4进行图书查询,输入5进行图书总览,输入6进行退出软件,输入7进行修改密码,如下图所示:
在这里插入图片描述
图书入库:把图书的信息录入一个二进制的文件种。保存成功返回主菜单;按任意键返回主菜单;如下图所示:
在这里插入图片描述
修改信息:输入对应的书名与编号,然后图书入库功能进行相应的修改。如下图所示:
在这里插入图片描述
删除信息:输入对应的编号,然后在确认删不删除。如果输入对应的编号不对,则可重新检索和返回主菜单,之后可返回主菜单;如下图所示:
在这里插入图片描述
图书查询:输入1进行书名查询,输入2进行作者查询,输入3进行登录号查询,输入4进行出版社查询,输入5进行模糊查询,查询信息与已有信息符合进入图书总览。输入0返回主菜单;如下图所示:
在这里插入图片描述
图书总览:可查看已录入的全部书籍信息;如下图所示:
在这里插入图片描述
退出软件:退出图书管理信息系统。如下图所示:
在这里插入图片描述
修改密码:先输入旧密码,旧密码正确再连续输入两次新密码(两次输入结果完全相同)后,新密码取代旧密码,并存放到帐户信息文件中,之后跳到登陆界面重新登陆。如果旧密码不对则可返回主菜单;如下图所示:
在这里插入图片描述
在这里插入图片描述
五、设计心得(不能少于200字)
本次课程设计,除去各种闲杂时间,大约在设计上花费10个小时,编程上花费20小时,在输入和调试上花费35小时,其中大概有30多个小时是在思考问题。
这次在调试地过程中,也遇到了很多难题,比如编译不通过,在检查过程中也没有逻辑错误,百思不得其解后,我将出问题的那部分代码放到了新的源代码中来单独测试,通过调试后,从而发现问题并改正。编译通过,程序运行时发生警告,百思不得其解后,我也将出问题的那部分代码放到了新的源代码中来单独测试,通过调试后,发现问题大概出在fscanf语句和fprintf语句上,最后通过查询资料发现,原来在读写文件时,fscanf语句和fprintf语句,在输出和输入表列不用加&符号。这个问题也得到了解决。
另外还遇到了很多问题,都是采用类似调试——锁定目标——查阅资料——解决的步骤去完成的。
对于我的程序,我觉得功能还比较完善。但是还有很多可以添加的地方,比如添加一个借书榜单,逾期不还进行登记等等,代码方面还能可以简化一些,多设计一些更加通用的函数,比如建立链表函数,删除数据函数等等。有了这次设计的经验,我相信下次我能做到更好。
收获:
通过这次的课程设计我明白了完成一个好的程序,
首先要有明确的需求分析,只有这样才更好地完善程序;
第二,需要构建一个清晰合理的框架结构,来让各功能之间有条不紊地运行;
第三,针对每一个功能,我们要设计准确,简便,人性化的算法及操作逻辑,使各个功能能够给用户带来更好的体验;
第四,编写代码时要思路清晰,文本清楚,多记备注,画流程图,编写文档,这样能够使自己的思路更加清晰,从而更加有效地避免错误。
第五,调试过程是整个程序实现最重要的步骤之一,在调试中遇到问题无法解决,应当对着自己的代码,在脑子里执行,逐个排除直至锁定目标,另外编译器上的调试功能也是十分的使用,你可以逐条语句执行和某个值的变化来快速地找到问题的症结。
另外我对于C语言的知识也掌握得更加深入和牢固了,对于链表,指针,文件的知识也更加得心应手了。在此后我愿意更多地尝试实际地去完成一个程序来让自己的知识得到更好的巩固。
代码:
/*

课程设计项目名称:图书管理信息系统

作者:青春

时间:2019.6.10

*/

#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<conio.h>
#include<stdlib.h>
#include<malloc.h>
#include <time.h>
#define N sizeof(struct BOOK)

char c;//输入任意键

struct BOOK //图书信息

{

char number[10];   //登录号

char name[10];     //书名

char author[10];    //作者名

char type[10];      //类型

char publish[10];  //出版单位

char time[8];        //出版时间

float price;       //价格

int num;         //数量

int x;

struct BOOK *next;   //指针域

};

typedef struct BOOK Book;

typedef Book *book;

void gaimi(); //修改密码

void login(); //登录界面

void HideCursor(); //隐藏光标
void toxy(int x, int y); //将光标移动到X,Y坐标处

void over(); //退出

void menu(); //菜单

void input_book(); //图书入库

void save_book(book p);//将图书信息存入文件

void find_book(); //图书查询

void print_book(); //图书总览

void del_book(); //删除图书

void amend_book(); //修改信息
book ss();

void find_name_book(); //按书名查询

void find_author_book(); //按作者查询

void find_number_book(); //按登录号查询

void find_publish_book(); //按出版社查询

void fuzzy_search(); //模糊查找

struct user
{//存放用户名的结构体
char pwd[20];
}us;

char username[15]=“admin”,pwd1[100]; //username[15]原始账号,pwd1修改密码时的比较

void HideCursor() //隐藏光标

{

CONSOLE_CURSOR_INFO cursor_info = {1, 0};

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);

}

void toxy(int x, int y) //将光标移动到X,Y坐标处

{

COORD pos = { x , y };

HANDLE Out = GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleCursorPosition(Out, pos);

}

void menu() //菜单

{
time_t T; //获取系统时间
struct tm * timenow;
time ( &T );
timenow = localtime ( &

  • 8
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值