我的第一个项目:图书管理系统

简单介绍在这里插入图片描述

   上图表明了我做这个项目要实现的基本功能,包括各个模块的增删改查,以及用户名
登陆,三次后跳出什么的,因为还学习C语言没有多久,还做得比较的粗糙,后续应该
会做的更好,有兴趣的同学可以点个关注,一起成长。
	下面是关于其中一些代码的部分:

结构体的申明部分以及一些全局变量的申明

 #ifndef _INFO_H__
  2 #define _INFO_H__
  3 
  4 #include<stdio.h>
  5 #include<stdlib.h>
  6 #include<string.h>
  7 
  8 #define NAME_LEN 40//用户名长度
  9 #define PASS_LEN 40//密码长度
 10 
 11 #define FILE_ADMIN "adminSys.bin"
 12 #define FILE_BOOK "bookSys.bin"
 13 #define FILE_VIP "vipSys.bin"
 14 
 15 
 16 struct sAdmin{
 17     char name_supAdmin[NAME_LEN];//超级用户名
 18     char pass_supAdmin[PASS_LEN];//超级密码
 19 };
 20 
 21 typedef struct adminInfo{
 22     int id_admin;//普通管理员编号
 23     char name_admin[NAME_LEN];//普通管理员姓名
 24     char user_admin[NAME_LEN];//普通管理员用户名
 25     char pass_admin[PASS_LEN];//密码
 26 }Admin;
 27 
 28 extern Admin *padmin;//用于存储记录管理员信息的指针 申请动态内存
 29 extern size_t size_admin ;//申请动态内存时能够存储的普通管理员信息的数量
 30 extern size_t cnt_admin;//当前动态内存中管理员信息的数量
 31 extern int madeId_admin;//自动生成管理员编号
 32 #define SIZE_ADMIN sizeof(Admin) //普通管理员系统内存大小
 33 
 34 typedef struct bookInfo{
 35     int id_book;//图书编号
 36     char name_book[NAME_LEN];//书名
 37     char author_book[NAME_LEN];//作者
 38     int usePrice;//书籍使用价格 
 39     int amount;//本图书数量
 40     int bowTimes;//借阅次数
 41 }Book;
 42 
 43 extern Book *pbook;//用于存储记录管图书信息的指针 申请动态内存
 44 extern size_t size_book;//申请动态内存时能够存储的图书信息的数量
 45 extern size_t cnt_book;//当前动态内存中图书信息的数量
 46 extern int madeId_book;//自动生成图书编号
 47 #define SIZE_BOOK sizeof(Book) //图书管理系统内存大小
 48 
 49 typedef struct vipInfo{
 50     int id_vip;//会员编号
 51     char name_vip[NAME_LEN];//会员姓名
 52     char user_vip[NAME_LEN];//会员用户名
 53     char pass_vip[PASS_LEN];//会员密码
 54     int balance;//会员余额
 55     char state[NAME_LEN];//借书状态
 56 }Vip;
 57 
 58 extern Vip *pvip;//用于存储记录会员信息的指针 申请动态内存
 59 extern size_t size_vip;//申请动态内存时能够存储的会员的数量
 60 extern size_t cnt_vip;//当前动态内存中会员信息的数量
 61 extern int madeId_vip;//自动生成会员编号
 62 #define SIZE_VIP sizeof(Vip) //会员管理系统内存大小
 63 
 64 enum RET_CODE{
 65     SUCCESS = 0,
 66     ARG_ERR,
 67     OPEN_ERR,
 68     FILE_NOT_EXISTS,
 69     WRITE_ERR
 70 };
 71 
 72 #endif

main函数以及其中的已经声明了的run函数

  1 #include "view.h"
  2 #include "bigRun.h"
  3 
  4 Admin *padmin = NULL;//用于记录存储管理员信息的指针
  5 size_t size_admin = 1000;//可申请存储管理员信息的数量
  6 size_t cnt_admin = 0;//当前管理员数量
  7 int madeId_admin = 1;//第一个管理员的编号
  8 
  9 Book *pbook = NULL;//用于记录存储图书信息的指针
 10 size_t size_book = 1000;//可申请存储图书信息的数量
 11 size_t cnt_book = 0;//当前图书数量
 12 int madeId_book = 1;//第一个图书的编号
 13 
 14 Vip *pvip = NULL;//用于记录存储会员信息的指针
 15 size_t size_vip = 1000;//可申请存储会员信息的数量
 16 size_t cnt_vip = 0;//当前会员数量
 17 int madeId_vip = 2019000;//第一个会员的编号
 18 
 19 int main(int argc,int *argv[]){
 20     load_admin(FILE_ADMIN);//将程序中管理员的内容写入文件
 21     load_book(FILE_BOOK);//将程序中图书的内容写入文件
 22     load_vip(FILE_VIP);//将程序中会员的内容写入文件
 23     run();
 24 } 
下面是run()函数
  1 #include "bigRun.h"
  2 #include "Info.h"
  3 void run(){
  4     struct sAdmin sp={"123","123"};
  5     int opt = 0;
  6     printf("-----欢迎进入图书管理系统-----\n");
  7     printf("1.超级管理员模式\n");
  8     printf("2.普通管理员模式\n");
  9     printf("3.会员模式\n");
 10     printf("0.退出系统\n");
 11     printf("请选择:");
 12     while(1){
 13         scanf("%d",&opt);
 14         switch(opt){
 15             case 1:
 16                 run1(sp);
 17                 break;
 18             case 2:
 19                 run2();
 20                 break;
 21             case 3:
 22                 run3();
 23                 break;
 24             case 0:
 25                 save_admin(FILE_ADMIN);
 26                 save_book(FILE_BOOK);
 27                 save_vip(FILE_VIP);
 28                 free(padmin);
 29                 free(pbook);
 30                 free(pvip);
 31                 exit(0);
 32             default:
 33                 printf("Error!\n");
 34         }
 35     }
 36 }
 以上的  "xxxx.h"是函数声明,方便在其他函数中使用。

将读写文件程序

  1 #include "file_admin.h"
  2 #include<unistd.h>
  3 #include "oper.h"
  4 //从文件中加载到内存中
  5 int load_admin(const char * path){
  6     if(path == NULL){
  7         return ARG_ERR;
  8     }
  9     if(access(path,F_OK)!=0){
 10         return FILE_NOT_EXISTS;
 11     }
 12     FILE *fp = fopen(path,"r");
 13     if(fp == NULL){
 14         return OPEN_ERR;
 15     }
 16     fread(&madeId_admin,4,1,fp);
 17 //  printf("%d*******\n",madeId_admin);
 18     Admin a = {};
 19     while(fread(&a,SIZE_ADMIN,1,fp)>0){
 20 //      printf("%s*******",a.name_admin);
 21         int ret = addAdmin(&a);
 22         if(ret != 1){
 23             fclose(fp);
 24             return ret;
 25         }
 26     }
 27     fclose(fp);
 28     return SUCCESS;
 29 }
 30 
 31 //把内存中的数据存储到文件中
 32 int save_admin(const char * path){
 33     if(path == NULL){
 34         return ARG_ERR;
 35     }
 36     FILE *fp = fopen(path,"w");
 37     if(fp == NULL){
 38         return OPEN_ERR;
 39     }
 40     fwrite(&madeId_admin,4,1,fp);
 41 
 42     if(fwrite(padmin,SIZE_ADMIN,cnt_admin,fp)<cnt_admin){//一次一次写入
 43         fclose(fp);
 44         return WRITE_ERR;
 45     }
 46 
 47     fclose(fp);
 48     return SUCCESS;
 49 }

超级管理模式下增加管理员的方式

  1 #include "oper.h"
  2 
  3 int addAdmin(Admin* pa){
  4     if(pa == NULL){  //如果传参错误,则返回-1;
  5         return -1;
  6     }
  7     if(padmin == NULL){ //如果没有申请动态内存
  8         padmin = malloc(SIZE_ADMIN*size_admin);//则申请动态内存,大小为SIZE_ADMIN*size_admin
  9     }
 10     if(padmin != NULL && size_admin == cnt_admin){//如果申请动态内存了并且已经满了
 11         size_admin = 2*size_admin;//那么空间加倍
 12         padmin = realloc(padmin,SIZE_ADMIN*size_admin);
 13     }
 14     if(padmin == NULL){//如果申请动态内存失败,返回-1
 15         return -1;
 16     }
 17     padmin[cnt_admin] = *pa;//将传进来的参数赋值给padmin
 18     ++cnt_admin;//管理员数量加一
 19     return 1;//返回1
 20 }
 21 
然后是主函数
 50 void add_Admin(){
 51     Admin a = {};//生成一个空的结构体名为a
 52     a.id_admin = madeId_admin++;//管理员编号自动加1
 53     printf("Add Admin\n");
 54     printf("请输入姓名:");
 55     scanf("%s",a.name_admin);
 56     size_t i;
 57     int flag;
 58     do{
 59         flag = 0;//首先让flag为0
 60         printf("请输入用户名:");
 61         scanf("%s",a.user_admin);
 62         for(i=0;i<cnt_admin;i++){
 63             if(strcmp(padmin[i].user_admin,a.user_admin)==0){
 64                 printf("用户名重复,请重新尝试!\n");
 65                 flag = 1;//如果输入用户名重复了则flag=1,在进行一次循环
 66             }
 67         }
 68     }while(flag);真则继续循环,假则跳出循环,用do{}while()的方式至少进行一次
 69     printf("请输入密码:");
 70     scanf("%s",a.pass_admin);
 71     addAdmin(&a);//将a传递到进addAdmin()这个函数中,增加管理员。
 72     showAdmin(&a);
 73 }
以上为本项目的部分代码,后面还有完整的项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值