图书出入库管理系统
C语言程序设计课设
说是C语言程序设计的课设,实际上和上学期的数构的课设没什么区别,换了个系统而已,也不知道学校老师为啥要多一门这个课设。不过还是有所收获的,会改了很多常见的BUG,还把系统做的有点花里胡哨的(功能多了点)。等以后有空,还想再完善一下这个简易的图书管理系统,毕竟老师给了我一个“界面设计还可以再优化”的建议,而且有些地方还有些小毛病要改正。
系统简介
图书出入库管理系统具体的功能包括:登陆注册、图书入库(管理员专属权限)、图书销售(购物车功能)、查看图书列表及库存情况、添加图书(加入购物车)、删除图书、数据保存、数据备份等功能,如图1所示。两个bk数组的数据分别来自文件book.txt和文件buy.txt,us数组的数据来自文件user.txt,三个数组作为数据基础,所有的功能操作都围绕着这三个数组,影响这三个数组,其数据的变化最终也要分别保存到对应的三个文件中。
基本功能:通过该系统可以进行图书信息显示、图书入库、图书销售、图书查询、图书删除等操作。
可选功能:通过该系统可以进行系统登录身份权限验证,分为普通用户和管理员两种权限身份,不同权限,可使用的功能不同。
添加图书时需要录入以下内容:书名、作者、类型、出版社、书号、价格、库存数量。
代码部分
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <io.h>
#include <conio.h>
#define MAXNUM 100 /*书库中书籍种类可能达到的最大数量*/
//账号状态及界面功能标识符,pyth和gly分别表示普通用户和管理员的身份;cklb和gwc分别表示查看列表和购物车的功能
int ptyh=0,gly=0,cklb=0,gwc=0;
//创建三个顺序表(书库书籍、购物车书籍、帐号)
typedef struct /*书籍定义*/
{
char bkname[10]; /*书名*/
char auname[10]; /*作者*/
char type[5]; /*类型*/
char press[21]; /*出版社*/
int bknum; /*书号*/
float price; /*价格*/
int num; /*库存数量*/
} BOOK;
typedef struct
{
BOOK bk[MAXNUM]; /*通过类型定义变量,书库书籍信息数组*/
int TotalBook; /*最后一个元素在数组中的位置,即下标,空表为-1 */
}BookList; /*书籍信息表的顺序存储结构类型为BookList */
BookList book_list; /*定义书库书籍信息顺序表*/
BookList book_buy_list; /*定义购物车书籍信息顺序表*/
typedef struct /*帐号定义*/
{
char name[10]; /*用户名*/
char pass[10]; /*密码*/
char type[10]; /*类型(管理员/普通用户)*/
}USER;
typedef struct
{
USER us[MAXNUM]; /*通过类型定义变量,帐号信息数组*/
int TotalUser; /*最后一个元素在数组中的位置,即下标,空表为-1 */
}UserList; /*帐号信息表的顺序存储结构类型为UserList */
UserList user_list; /*定义帐号信息顺序表*/
//创建字符串来存储文本的名称
char b[10]="book.txt";
char buy[10]="buy.txt";
char t1[10]="普通用户";
char t2[10]="管理员";
//将硬盘帐号信息文件中的数据读入对内存的book_list顺序表中
void ReadData(){
FILE *fp;
int i;
if ((fp=fopen("book.txt","rb"))==NULL){
printf("Can not open the file!\n");return;
}
fread(&book_list.TotalBook,sizeof(int),1,fp);
for(i=0;i<book_list.TotalBook;i++)
{
fread(&book_list.bk[i],sizeof(BOOK),1,fp);
}
fclose(fp);
}
//将硬盘帐号信息文件中的数据读入对内存的book_buy_list顺序表中
void ReadData_buy(){
FILE *fp;
int i;
if ((fp=fopen("buy.txt","rb"))==NULL){
printf("Can not open the file!\n");return;
}
fread(&book_buy_list.TotalBook,sizeof(int),1,fp);
for(i=0;i<book_buy_list.TotalBook;i++)
{
fread(&book_buy_list.bk[i],sizeof(BOOK),1,fp);
}
fclose(fp);
}
//将硬盘帐号信息文件中的数据读入对内存的user_list顺序表中
void ReadData_user(){
FILE *fp;
int i;
if ((fp=fopen("user.txt","rb"))==NULL)
{
printf("Can not open the file!\n");return;}
fread(&user_list.TotalUser,sizeof(int),1,fp);
for(i=0;i<user_list.TotalUser;i++)
{
fread(&user_list.us[i],sizeof(USER),1,fp);
}
fclose(fp);
}
//将内存中三种顺序表的变化,分别存入对应的硬盘文件中
void WriteData(){
FILE *fp;
if ( (fp=fopen("book.txt","wb"))==NULL){
printf("Can not open the file!\n");return;
}
fwrite(&book_list.TotalBook , sizeof(int) , 1 ,fp);
fwrite(book_list.bk,sizeof(BOOK),book_list.TotalBook,fp);
fclose(fp);
}
void WriteData_buy(){
FILE *fp;
if ( (fp=fopen("buy.txt","wb"))==NULL){
printf("Can not open the file!\n");return;
}
fwrite(&book_buy_list.TotalBook , sizeof(int) , 1 ,fp);
fwrite(book_buy_list.bk,sizeof(BOOK),book_buy_list.TotalBook,fp);
fclose(fp);
}
void WriteData_user(){
FILE *fp;
int i;
if ((fp=fopen("user.txt","wb"))==NULL)
{
printf("Can not open the file!\n");return;}
fwrite(&user_list.TotalUser , sizeof(int) , 1 ,fp