C语言课设--藏书管理信息系统

学了一个多学期的c语言,还是有必要去记录一下自己的学习进程的,做一次课设会让自己发现很多不足的地方,也加深了对编程和程序的理解,下面是一些我自己做的一个c语言程序,关于藏书管理信息系统的一个程序,我将功能相似的部分用文件的形式分割开来。

在使用这样写的程序时,需要先创建一个工程项目,然后将这些文件添加到项目中去,才能正常运行,否者系统不会自己识别是不是一个程序的,会报错

主函数

#include <stdio.h>
#include <process.h>
#include "Book.h"
#include "File.h"

void showMainMenu();
void run();
void showbookZRMenu();
void printHZHeader();
void printBookHZ();
void printAllBook();
void enterbookZR();
void showbookRKMenu();
void RKBook();
void enterbookRK();
void showbookCXMenu();
void enterbookCX();
void showbookXGMenu();
void modifBook();
void deletBook();
void enterbookXG();
void showhelpMenu();
void printhHeple();
void printXTxinxi();
void enterhelp();
void CSH();
void start();
void end();

BookTable bookTable;//全局变量 
//藏书管理信息系统
//子系统:作者编写的书
 
//页面设计
 //主页面 
 
char mainMenu[] = "----------------------------------------------------------\n"

"                   欢迎使用藏书管理信息系统\n" 
"----------------------------------------------------------\n"
"            1、图书总览\n"
"----------------------------------------------------------\n" 
"            2、图书入库\n"
"----------------------------------------------------------\n"
"            3、图书查询\n"
"----------------------------------------------------------\n"
"            4、修改信息\n"
"----------------------------------------------------------\n"
"            5、帮    助\n"
"----------------------------------------------------------\n"
"            6、退出软件\n" 
"----------------------------------------------------------\n"
"请选择:";
//1、图书总览 
char bookZRMenu[] = "-------------------------------------------------------- --\n"
"                藏书管理系统---图书总览\n" 
"----------------------------------------------------------\n"
"        请选择查看的方式\n"
"----------------------------------------------------------\n"
"        1、查看图书汇总的信息\n"
"----------------------------------------------------------\n"
"             2、查看全部图书的详细信息\n"
"----------------------------------------------------------\n"
"        3、返回(按任意键继续)\n" 
"----------------------------------------------------------\n"
;

//2、图书入库
char bookRKMenu[] = "----------------------------------------------------------\n"
"                藏书管理系统---图书入库\n" 
"----------------------------------------------------------\n"
"        1、录入图书信息\n"
"----------------------------------------------------------\n"
"        2、返回(按任意键继续)\n" 
"----------------------------------------------------------\n"
;
//3、图书查询
char bookCXMenu[] ="----------------------------------------------------------\n"
"                藏书管理系统---图书查询\n" 
"----------------------------------------------------------\n"
"        1、按作者姓名查找\n"
"----------------------------------------------------------\n"
"        2、按图书名称查找\n"
"----------------------------------------------------------\n" 
"        3、返回(按任意键继续)\n" 
"----------------------------------------------------------\n"
;

//4、修改信息
char bookXGMenu[] ="----------------------------------------------------------\n"
"                藏书管理系统---修改信息\n" 
"----------------------------------------------------------\n"
"        1、修改图书信息\n"
"----------------------------------------------------------\n"
"        2、删除图书信息\n"
"----------------------------------------------------------\n" 
"        3、返回(按任意键继续)\n" 
"----------------------------------------------------------\n"
;
//5、帮    助
char helpMenu[] ="----------------------------------------------------------\n"
"                藏书管理系统---帮助\n" 
"----------------------------------------------------------\n"
"        1、查看帮助\n"
"----------------------------------------------------------\n"
"        2、查看系统信息\n"
"----------------------------------------------------------\n"
"        3、返回(按任意键继续)\n" 
"----------------------------------------------------------\n" 
;
//6、退出软件
char TUCHUMenu[] ="----------------------------------------------------------\n"
"              欢迎下次使用藏书管理系统\n" 
"----------------------------------------------------------\n"
;

//主页面的开始 
void showMainMenu()
{
    system("cls"); // 调用DOD命令cls清屏
    printf("%s", mainMenu);
}
void run() 
{
    char cmd;
    while (1) 
    {
        showMainMenu(); // 显示菜单
        
        cmd = getchar();
        getchar(); // 清除输入流中留下的'\n'
        switch (cmd) 
        {
        case '1':
            enterbookZR(); 
            break;
        case '2':
            enterbookRK();
            break;
        case '3':
            enterbookCX();
            break;
        case '4':
            enterbookXG();
            break;
        case '5':
            enterhelp();
            break;    
        case '6':
            printf("退出了系统\n");
            return;
        default:
            printf("错误命令!\n");                    
        }
    }
}
//1、图书总览
void showbookZRMenu()
{
    system("cls"); // 调用DOD命令cls清屏
    printf("%s", bookZRMenu);
}
void printHZHeader()
{
    printf("%-12s", "总的作者");
    printf("%-12s", "总的图书");
    printf("%-12s", "在库数量\n");
}
void printBookHZ()
{
    int author=bookTable.counts;
    int name=bookTable.counts;
    int Allnumber=0;
    int i=0;
    for(i;i<name;i++)
    {
        Allnumber += bookTable.bookArray[i].number;
    }
    printf("%-12d",bookTable.counts);
    printf("%-12d",name);
    printf("%-12d\n",Allnumber);
}
void printAllBook()
{
    int j=bookTable.counts;
    int i=0;
    for(i;i<j;i++)
    {
        printBook(&bookTable.bookArray[i]);
        
    }
}
void enterbookZR()
{
    char cmd;
    while (1) {
        showbookZRMenu();
        cmd = getchar();
        getchar();
        switch (cmd) {
        case '1':            //查看全部图书的汇总信息 
            printHZHeader(); 
            printBookHZ();
            break;
        case '2':            //查看全部图书信息 
            printHeader();
            printAllBook();
            break;
        case '3':
            printf("返回上级菜单,按任意键继续...\n");
            return;
        default:
            printf("错误命令!\n");                    
        }
        system("pause"); // 调用DOD命令pause使屏幕显示暂停
    }
}

//2、图书入库
void showbookRKMenu()
{
    system("cls"); 
    printf("%s", bookRKMenu);
}
void RKBook()
{
    Book book;
    inputBook(&book);    
    bookTable.bookArray[bookTable.counts]=book;
    bookTable.index = bookTable.counts;
    bookTable.counts++;
    bookTable.isModified = 1;
    end();

void enterbookRK()
{
    char cmd;
    while (1) {
        showbookRKMenu();
        cmd = getchar();
        getchar();
        switch (cmd) {
        case '1':            //录入图书信息 
            printf("请安提示录入图书信息"); 
            RKBook();
            break;
        case '2':            //返回(按任意键继续)
            printf("返回上级菜单,按任意键继续...\n");
            return;
        default:
            printf("错误命令!\n");                    
        }
        system("pause"); // 调用DOD命令pause使屏幕显示暂停
    }
}

//3、图书查询
void showbookCXMenu()
{
    system("cls"); 
    printf("%s", bookCXMenu);

void enterbookCX()
{
    char cmd;
    while (1) {
        showbookCXMenu();
        cmd = getchar();
        getchar();
        switch (cmd) {
        case '1':            //按作者姓名查找
            AuthorSearchAndPrint(&bookTable);
            break;
        case '2':            //按图书名称查找 
            NameSearchAndPrint(&bookTable);
            break;
        case '3':
            printf("返回上级菜单,按任意键继续...\n");
            return;
        default:
            printf("错误命令!\n");                    
        }
        system("pause"); // 调用DOD命令pause使屏幕显示暂停
    }
}

//4、修改信息
void showbookXGMenu()
{
    system("cls"); 
    printf("%s", bookXGMenu);

void modifBook()
{
    char name[12];
    double price;
    int i;
    int number;
    printf("请输入想要修改信息的图书名称:"); 
    scanf("%s",name);
    i=searchBookName(name,&bookTable);        //searchBookName()是图书搜索函数 
    printf("请输入新的在库数量:");
    scanf("%d",&number);
    bookTable.bookArray[i].number=number;
    printf("请输入新的图书价格:");
    scanf("%lf",&price);
    bookTable.bookArray[i].price=price;
    bookTable.index=1;
    end();        //对信息进行保存 
    
}
/*
void deletBook()
{
    char name[12];
    int i;
    printf("请输入想要删除的图书名称"); 
    scanf("%s",name);
    i=searchBookName(name);
    if(i==-1)
    {
        printf("不存在该图书,或者该图书经被删除了!");
    }
    else
    {
        int j;
        for(j=i;j<bookTable.counts;j++)
        {
            bookTable.bookArray[j]=bookTable.bookArray[j+1];
        }
        
    }
}    
*/

void enterbookXG()
{
    char cmd;
    while (1) {
        showbookXGMenu();
        cmd = getchar();
        getchar();
        
        switch (cmd) {
        case '1':            //修改图书信息 
            modifBook();    //(考虑到图书的基本信息不会变,变化的只能是图书的在库数量)
//            end();        //对信息进行保存 
            break;
        case '2':            //删除图书信息 
            bookDelete(&bookTable);
            end();
            break;
        case '3':
            printf("返回上级菜单,按任意键继续...\n");
            return;
        default:
            printf("错误命令!\n");                    
        }
        system("pause"); // 调用DOD命令pause使屏幕显示暂停
    }
}

//5、帮    助
void showhelpMenu()
{
    system("cls"); 
    printf("%s", helpMenu);

void printhHeple()
{
    printf("1、按照系统的提示信息完成所需要进行的步骤\n");
    printf("2、当按退出的时候,按任意键便可以继续\n");
    printf("3、需要退到主菜单的时候退出程序\n"); 
}
void printXTxinxi()
{
    printf("这是由物联网201班胡俊诚开发,12月1日投入测试的藏书信息管理系统");
    printf("当前版本为藏书信息管理系统1.0"); 
}
void enterhelp()
{
    char cmd;
    while (1) {
        showhelpMenu();
        cmd = getchar();
        getchar();
        switch (cmd) {
        case '1':            //查看帮助
            printhHeple();
            break;
        case '2':            // 查看系统信息
            printXTxinxi();
            break;
        case '3':
            printf("返回上级菜单,按任意键继续...\n");
            return;
        default:
            printf("错误命令!\n");                    
        }
        system("pause"); // 调用DOD命令pause使屏幕显示暂停
    }
}

//bookTable初始化
void CSH(){
    Book book1 = {"凡尔纳", "海底两万里", 21.9, 10, {2021,11,30},
    "主要讲述阿龙纳斯跟随鹦鹉螺号潜艇遨游海洋,在海底进行环球探险旅行的故事"},

        
    book2 = {"查尔斯", "雾都孤儿",19.9, 15, {2021,11,30},
     "讲述善良的奥利弗经历重重的困难后,雨后见彩红,终于迎来美满的故事结局"},
    
    book3 = {"雨果", "巴黎圣母院",19.9, 10,{2021,11,30},
    "巴黎圣母院大教堂是一座位于法国巴黎市中心、西提岛上的天主教的主教堂"};
     
    bookTable.bookArray[0] = book1;
    bookTable.bookArray[1] = book2;
    bookTable.bookArray[2] = book3;
    bookTable.counts = 3;
    bookTable.index = 0;
    bookTable.isModified = 0;
    FILE *pf = openTextFileForWrite("Books.txt");
    if (pf==NULL)
    {
        puts("打开文件失败!");
        exit(-1);
    }
    printf("打开成功");
    outputBookTableToTextFile(pf, &bookTable);
    printf("保存成功");
    fclose(pf);
    
//    printHeader();
//    printBook(&bookTable.bookArray[0]);
//    printBook(&bookTable.bookArray[1]);
//    printBook(&bookTable.bookArray[2]);

void start()
{
    FILE *pf = openTextFileForRead("Books.txt");
    if (pf==NULL)
    {
        puts("打开文件失败!");
        exit(-1);
    }
    printf("打开成功\n");
    inputBookTableFromTextFile(pf, &bookTable);
//    printHeader();
//    printBook(&bookTable.bookArray[0]);
//    printBook(&bookTable.bookArray[1]);
//    printBook(&bookTable.bookArray[2]);
}
void end()
{
    FILE *pf = openTextFileForWrite("Books.txt");
    if (pf==NULL)
    {
        puts("打开文件失败!");
        exit(-1);
    }
    printf("打开成功\n");
    outputBookTableToTextFile(pf,&bookTable);
}
void main()
{

    CSH();        //初始化函数 
    start();    //将数据内容从Books.text文件中提取出来 
    run();        //具体运行函数  
    return;
}

注意这是下一个文件-------------------------------------------------------------------------------注意这是下一个文件-------------------------------------------------------------------------------

#ifndef __BOOK_H
#define __BOOK_H


typedef struct tagDate
{
    int year;
    int month;
    int day;
} Date;

typedef struct tagBook
{
    char author[12];    //作者姓名 
    char name[12];        //图书名称
    double price;        //图书价格
    int number;            //图书入库数量
    Date Day;            //入库时间 
    char subject[80];    //图书简介
}Book;

#define N 100

typedef struct tagBookTable 
{
    Book bookArray[N];     // 存放book图书 
    int counts;           // 数组bookArray中的book图书数量
    int index;           // 当前book图书 
    int isModified;      // 数组bookArray的内容是否变了
}BookTable;

void printHeader();            //打印头信息 
//void printAllBook();        //打印汇总的图书信息
//void printBook();             //打印图书信息 
void printBook(Book *book);    //打印图书的信息 
void inputBook(Book *book); //录入图书信息 

#endif

注意这是下一个文件-------------------------------------------------------------------------------

#include <stdio.h>
#include "Book.h"

void printHeader()
{
    printf("%-12s", "图书作者");
    printf("%-12s", "图书名称");
    printf("%-12s", "图书价格");
    printf("%-12s", "在库数量");
    printf("%-16s", "入库日期");
    printf("%-30s\n", "图书简介");
    printf("-----------------------------------------------------------------------------------\n");
}

void printBook(Book *book)
{
    printf("%-12s", book->author);
    printf("%-12s", book->name);
    printf("%-14f", book->price);
    printf("%-10d", book->number);
    printf("%-4d年%-02d月%-02d日\n", book->Day.year, book->Day.month, book->Day.day);
    printf("%-82s\n", book->subject);
    printf("\n");
 } 
 
void inputBook(Book *book)
{
    printf("图书作者:");
    scanf("%s",book->author);
    
    printf("图书名称:");
    scanf("%s",book->name);
    
    printf("图书价格:");
    scanf("%lf",&book->price);
    
    printf("入库数量:");
    scanf("%d",&book->number);
    
    printf("购买日期,年:");
    scanf("%d", &book->Day.year);
    printf("月:");
    scanf("%d", &book->Day.month);
    printf("日:");
    scanf("%d", &book->Day.day);
    
    printf("图书简介:");
    scanf("%s",book->subject);
}

注意这是下一个文件-------------------------------------------------------------------------------

#ifndef __FILE_H
#define __FILE_H

#include <stdio.h>
#include "Book.h"

FILE *openTextFileForWrite(char *pFileName);    //用只写的方式打开 
FILE *openBinaryFileForWrite(char *pFileName);     

FILE *openTextFileForRead(char *pFileName);        //用只读的方式打开 
FILE *openBinaryFileForRead(char *pFileName);

void outputBookToTextFile(FILE *pf, Book *book);     //将数据存储到文件中 
void inputBookFromTextFile(FILE *pf, Book *book);    //将文件的数据读取 

void outputBookTableToTextFile(FILE *pf, BookTable *bookTable);
void inputBookTableFromTextFile(FILE *pf, BookTable *bookTable);

#endif
注意这是下一个文件-------------------------------------------------------------------------------

#include "File.h"
#include "Book.h"

FILE *openTextFileForWrite(char *pFileName)
{
    FILE *fp = fopen(pFileName, "wt");
    return fp;
}

FILE *openBinaryFileForWrite(char *pFileName)
{
    FILE *fp = fopen(pFileName, "wb");
    return fp;
}

FILE *openTextFileForRead(char *pFileName)
{
    FILE *fp = fopen(pFileName, "rt");
    return fp;
}

FILE *openBinaryFileForRead(char *pFileName)
{
    FILE *fp = fopen(pFileName, "rb");
    return fp;
}

void outputBookToTextFile(FILE *pf,Book *book)
{
    fprintf(pf, "%-12s", book->author);
    fprintf(pf, "%-12s", book->name);
    fprintf(pf, "%-14lf", book->price);
    fprintf(pf, "%-10d", book->number);
    fprintf(pf,"%-4d年%-02d月%-02d日 ", book->Day.year, book->Day.month, book->Day.day);
    fprintf(pf, "%-82s\n", book->subject); 
    
}
void inputBookFromTextFile(FILE *pf, Book *book)
{
    fscanf(pf, "%s", book->author); 
    fscanf(pf, "%s", book->name);
    fscanf(pf, "%lf",&book->price);
    fscanf(pf, "%d", &book->number);
    fscanf(pf, "%d", &book->Day.year);
    getc(pf);
    getc(pf);
    fscanf(pf, "%d", &book->Day.month);
    getc(pf);
    getc(pf);
    fscanf(pf, "%d", &book->Day.day);
    getc(pf);
    getc(pf);
    fscanf(pf, "%s", book->subject);
    
}


void outputBookTableToTextFile(FILE *pf, BookTable *bookTable)
{
    int n = bookTable->counts;
    int i=0;
    while (i<n)
    {
        outputBookToTextFile(pf, &bookTable->bookArray[i]);
        i++;
    }
}

void inputBookTableFromTextFile(FILE *pf, BookTable *bookTable)
{
    int n = 0;
    Book book;
    inputBookFromTextFile(pf, &book);
    while (!feof(pf))
    {
        bookTable->bookArray[n] = book;
        n++;
        inputBookFromTextFile(pf, &book);
    }
    bookTable->counts = n;
    bookTable->index = 0;
    bookTable->isModified = 0;
}

注意这是下一个文件-------------------------------------------------------------------------------

#ifndef __SEARCH_H
#define __SEARCH_H

#include <stdio.h>
#include<string.h>
#include "Book.h"

int searchBookName(char *name,BookTable *bookTable);
int searchAuthorName(char *author,BookTable *bookTable);

void AuthorSearchAndPrint(BookTable *bookTable);
void NameSearchAndPrint(BookTable *bookTable);
void bookDelete(BookTable *bookTable);
#endif

注意这是下一个文件-------------------------------------------------------------------------------

#include "Search.h"
int searchBookName(char *name,BookTable *bookTable)    //搜索图书名称查找位置 
{
    int i=0;     
//    char name[12];    
//    printf("请输入你需要查找的图书:");
//    scanf("%s",name);
    int counts= bookTable->counts;
    while(i<counts)    
    {
        int str;
        str=strcmp(name, bookTable->bookArray[i].name);
        if(str==0)
        {
            return i;    //返回的i,为书在bookArray[]中的序号 
        }
        i++;
    }
    return -1;        //返回-1时,说明系统中没有该图书 
    
}
int searchAuthorName(char *author,BookTable *bookTable)    //搜索作者名字查找位置 
{
    int i=0;
//    char author[12];
//    printf("请输入你需要查找的作者名字:");
//    scanf("%s",author);
    int counts= bookTable->counts;
    while(i<counts)    
    {
        int str;
        str=strcmp(author, bookTable->bookArray[i].author);
        if(str==0)
        {
            return i;    //返回的i,为作者在bookArray[]中的序号 
        }
        i++;
    }
    return -1;        //返回-1时,说明系统中没有该作者的图书 
    
}

void AuthorSearchAndPrint(BookTable *bookTable)        //搜索打印 
{
    
    int i=0;
    char author[12];
    printf("请输入你需要查找的作者名字:");
    scanf("%s",author);
    i=searchAuthorName(author,bookTable);
    if(i==-1)
    {
        printf("系统中没有该作者的图书");
    }
    else
    {
        printHeader();
        printBook(&bookTable->bookArray[i]);
    }

void NameSearchAndPrint(BookTable *bookTable)        //搜索打印
{
    
    int i=0;
    char name[12];    
    printf("请输入你需要查找的图书:");
    scanf("%s",name);
    i=searchAuthorName(name,bookTable);
    if(i==-1)
    {
        printf("系统中没有该图书");
    }
    else
    {
        printHeader();
        printBook(&bookTable->bookArray[i]);
    }
}
void bookDelete(BookTable *bookTable) 
{
    int i=0;
    char name[12];    
    printf("请输入你想要删除的图书:");
    scanf("%s",name);
    i=searchAuthorName(name,bookTable);
    if(i==-1)
    {
        printf("系统中没有该图书");
    }
    else
    {
        for(i;i<bookTable->counts;i++)
        {
            bookTable->bookArray[i]=bookTable->bookArray[i+1];
        }
        
    }
    
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值