精华内容
下载资源
问答
  • C语言图书管理系统

    万次阅读 多人点赞 2017-06-20 10:06:53
    图书管理能实行基本的图书信息管理和借还管理。 学校的期大一末考试就是让设计个小项目,因为当时比较菜,...最后通过各种调试和学长讨论才发现原来是因为我保存文件用的是重定向,也就是freopen()函数。...

    该图书管理能实行基本的图书信息管理和借还管理。

       学校的期大一末考试就是让设计个小项目,因为当时比较菜,感觉图书管理系统应该挺好写的,就选了这个。可能是最开始想的太简单了,在写的过程中还是遇到了各种各样的问题。最头疼的一次是我当我调用了保存文件的函数后再用清屏函数后会输出一段乱码,然后就卡死了。最后通过各种调试和找学长讨论才发现原来是因为我保存文件用的是重定向,也就是freopen()函数。

    freopen是被包含于C标准库头文件<stdio.h>中的一个函数,用于重定向输入输出流。该函数可以在不改变代码原貌的情况下改变输入输出环境,但使用时应当保证流是可靠的。

    这个函数有个缺点就是不稳定,而且我用书上的fclose()函数居然关不掉它。后来在网上搜了一下可以用freopen(“CON”,“r”,stdin)来关闭,但是还是不能解决它本身不稳定的问题。只好用了fopen()函数来进行文件的存取操作,这才解决了乱码的问题。

    在最开始设计图书管理系统功能的时候想的比较简单,只是能够实现添加删除图书,排序,查找功能。这部分还是用结构体写的,代码只写了三四百行。后来老师说需要有借书的功能,只好再添加。从这开始,对于图书管理系统功能的添加开始变得一发不可收拾。

    在添加完借书功能后,感觉能借书不能还书,就像一个圆少了一块似的。所以就加了一个还书的功能。由于之前书籍的信息都是用结构体来存储的,所以在借还书功能实现的过程中也就继续用的结构体来对图书信息进行修改。

     

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<time.h>
    #include <windows.h>
    #include<algorithm>
    
    using namespace std;
    
    struct library{
    	int ID;
    	char name[30];
    	double price;
    	char author[30];
    	int quan;
    	char itd[2000];
    }stu[100];
    struct asccount{
        char AcName[30];
        char password[12];
        char nickname[30];
    }sta[100];
    struct Book{
    	char Name[30];
    	char time[40];
    };
    struct node{
    	char users[30];
    	int sexes;
    	struct Book book[30];
    	int r;
    	node *Next;
    };
    typedef struct node *L;
    L pre, hnj=NULL, kl = new node;
    L HEAD = new node;
    char strr[30];
    int num=42,LLL,jj=2,logo=0,h=0,F=1,k=2,huan,oo;
    
    void display(void);//显示图书信息管理菜单*
    void load(void);//把图书信息加载到内存*
    void save(void);//将数据保存到磁盘*
    void Sort(void);//排序*
    void SortByScore(void);//按书名首字母排序*
    void AscendVyPick(void);//按单价升序排序*
    void DesendByPick(void);//按单价降序排序*
    int cmp1(library a, library b);//按书名首字母排序判断*
    int cmp2(library a, library b);//按单价升序排序判断*
    int cmp3(library a, library b);//按单价降序排序判断*
    void IdArrange(void);//重新整理书号*
    void Find(void);//查找*
    void add(void);//添加*
    void edit(void);//修改*
    void DeleteAll(void);//删除所有信息*
    void PrintRecord(void);//输出一条记录*
    void FindByName(void);//按书名查找*
    void FindByNum(void);//按书号查找*
    void FindByAuthor(void);//按作者查找*
    void output(void);//输出所有图书信息*
    void over(void);//结束程序*
    void Huifu(void);//恢复出厂设置*
    void PrinEdit(void);//输出修改菜单*
    void FindEdit(void);//输出查找菜单*
    void PrintSort(void);//输出排序菜单*
    void CheckUser(void);//检验账号的合法性*
    void addUser(void);//新建账号*
    void findPassword(void);//找回密码*
    void EditPassword(void);//修改密码*
    void loadUser(void);//将账号读入内存*
    void saveUser(void);//将账号存入磁盘*
    void printuser(void);//输出账号菜单*
    int ling(void);//账号登录*
    void PrintBorrow(void);//打印借书管理系统菜单*
    void Menu(void);//图书信息管理*
    void Borrow(void);//图书借还系统*
    void BorrowRecord(L q);//借书记录*
    void BorrowBook(L q, L y);//借书*
    void SendBook(L q, L y);//还书*
    L LookUser(L head);//用户搜索*
    void loadBorrow(L head);//将借书记录加载到内存*
    void saveBorrow(L head);//将用户借书记录加载到磁盘*
    void FuactionIntrod(void);//系统功能介绍*
    void Intropeople(void);//开发人员介绍*
    void Mainmenu(void);//打印主菜单*
    void hhk(void);//打印操作错误 *
    void loaduu(void);//数据数加载到内存*
    void saveuu(void);//数据数加载到磁盘*
    void Cpy(void);//备份图书信息*
    void HideCursor(void);//隐藏光标*
    void inwrong(void);//判断输入是否正确*
    void shan(void);
    void beifen(void);
    
    int main()
    {
    	int i,selt;
    	HideCursor();
    	LLL = 1;
    	loaduu();
    	if(!ling())
            return 0;
        system("cls");
        load();
        while(1){
            Mainmenu();
            oo = scanf("%d",&selt);
            if(!oo){
                	inwrong();
                	continue;
            }
            switch(selt){
                case 1:
                    Menu(); saveuu(); break;
                case 2:
                    Borrow(); break;
                case 3:
                    FuactionIntrod(); break;
                case 4:
                    system("cls"); Intropeople(); break;
                case 5:
                    system("cls"); if(ling() == 0){return 0;}  system("cls"); break;
                case 6:
                    saveuu(); system("cls"); over(); return 0;
                default :
                	system("cls"); hhk(); system("cls"); break;
            }
        }
        return 0;
    }
    
    //判断输入是否正确
    void inwrong(void)
    {
    	char s[50];
    	gets(s);
        system("cls");
        printf("\t\t\t输入错误!!\n");
        system("PAUSE");system("cls");
    }
    //隐藏光标
    void HideCursor()
    {
    	CONSOLE_CURSOR_INFO cursor_info = {1, 0};
    	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
    }
    //数据数加载到内存
    void loaduu(void)
    {
        FILE *fp;
        fp = fopen("数据个数.txt", "r");
        fscanf(fp, "%d", &num);
        fscanf(fp, "%d", &jj);
        fclose(fp);
        k = jj;
    }
    //数据数加载到磁盘
    void saveuu(void)
    {
        FILE *fp;
        fp = fopen("数据个数.txt", "w");
        fprintf(fp, "%d\n", num);
        fprintf(fp, "%d\n", jj);
        fclose(fp);
    }
    //备份图书信息
    void Cpy(void)
    {
        FILE *fp;
        int i;
        shan();
        fp = fopen("图书信息库.txt", "w");
        for(i = 0; i < num; i++){
            fprintf(fp, "%d\n",stu[i].ID);
            fprintf(fp, "%s\n",stu[i].name);
            fprintf(fp, "%.2lf\n",stu[i].price);
            fprintf(fp, "%s\n",stu[i].author);
            fprintf(fp, "%d\n",stu[i].quan);
            fprintf(fp, "%s\n",stu[i].itd);
        }
        fclose(fp);
        saveuu();
        printf("\n\n\t\t\t备份成功!!\n");
        system("PAUSE");
        system("cls");
    }
    //打印主菜单
    void Mainmenu(void)
    {
        printf("\t   ************************************************************\n");
        if(LLL){
        printf("\t   *                欢迎使用29组的图书管理系统                *\n");
        LLL = 0;
        }
        else{
        printf("\t   *                                                          *\n");
        printf("\t   *      您可以进行以下操作:                                 *\n");
        }
        printf("\t   *                                                          *\n");
        printf("\t   *      图书信息管理 请按 1                                 *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      图书借还管理 请按 2                                 *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      系统功能介绍 请按 3                                 *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      开发人员介绍 请按 4                                 *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      切换账号 请按 5                                     *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      退出系统 请按 6                                     *\n");
        printf("\t   *                                                          *\n");
        printf("\t   ************************************************************\n\n");
    }
    //系统功能介绍
    void FuactionIntrod(void)
    {
    	system("cls");
    	printf("本系统能执行以下操作:\n\n");
    	printf("一、登录界面功能介绍\n\n");
    	printf("1.登录账号\n\n2.注册新账号\n\n3.密码找回\n\n4.修改密码\n\n\t\t\t   ");
    	system("PAUSE");
    	system("cls");
        printf("二、图书信息管理系统功能介绍\n\n");
        printf("1. 查找功能\n\n");
        printf("1)按书号查找\n2)按书名查找\n3)按作者查找\n4)输出所有图书信息\n\n");
        printf("2. 排序功能\n\n");
        printf("1)按书名首字母排序\n2)按单价升序排序\n3)按单价降序排序\n\n");
        printf("3. 修改功能\n\n");
        printf("1)添加\n\n  可添加任意本书\n\n2)删除一本图书\n3)删除全部图书\n\n");
        printf("4. 恢复图书信息\n\n  如错误删除图书信息,可恢复上一次备份的图书信息\n\n");
        printf("5.备份图书信息\n\n\t\t\t   ");
        system("PAUSE");
    	system("cls");
        printf("三、图书借还系统功能介绍\n\n");
        printf("1.借阅图书功能\n\n");
        printf("此功能可使用户借阅本系统中现存的图书\n\n");
    	printf("2.还书功能\n\n");
    	printf("此功能可方便用户还书\n\n");
        printf("3. 用户借书还书记录查询功能\n\n");
        printf("此功能可查询个人借书和还书记录\n\n");
        printf("4. 用户借书还书信誉查询功能\n\n");
        printf("此功能可查询借书者的个人信誉值,若信誉值低于60将不能再通过本系统借书,同时,每一年年末都会对信誉值进行统计,\n");
        printf("并将所有用户信誉值恢复为100。\n\n");
        printf("信誉值扣除标准:\n\n");
        printf("1)借的书需在两个工作日内归还,逾期还书  每次扣除信誉值 5。\n");
        printf("2)对图书造成损坏或丢失的  每次扣除信誉值 10 , 并原价赔偿。\n");
        printf("3)超过还书时间一个工作日的,信誉值将被直接清零,并不能在本系统进行任何操作。\n\n");
        printf("四、切换账号功能\n\n 可以切换账号\n\n\t\t\t   ");
        system("PAUSE");
        system("cls");
    }
    
    //检验账号的合法性
    void CheckUser(void)
    {
        int i,flag = 0,K,KK;
        char ss[30],sf[10];
        printf("\t\t\t\t请输入登录账号:\n\n\t\t\t\t ");
        scanf("%s",ss);
        for(i = 0; i < jj; i++){
            if(strcmp(sta[i].AcName, ss) == 0){
                strcpy(strr, ss);
                flag = 1;
                break;
            }
        }
        if(!flag){
            printf("\n\t\t\t\t此账号还未注册!!\n\n\t\t\t   ");
            system("PAUSE");
            system("cls");
            return;
        }
        printf("\t\t\t\t请输入密码:\n\n\t\t\t\t ");
        scanf("%s",sf);
        if(strcmp(sta[i].password, sf) == 0){
            h = 0;
            flag = 2;
        }
        if(flag == 1){
            system("cls");
            printf("\t\t\t\t密码错误!!\n\n\t\t\t   ");
            system("PAUSE");
            system("cls");
            h++;
            return ;
        }
        else if(flag == 2){
        	printf("\t\t\t   请输入下面的验证码:\n");
            srand((unsigned)time(NULL));
            K = rand();
            printf("\n\t\t\t\t  %d\n\t\t\t\t  ",K);
            oo = scanf("%d",&KK);
            if(!oo){
                inwrong();
                return ;
            }
            if(KK != K){
                printf("\n\t\t\t验证码错误!!\n");
                system("PAUSE");
                system("cls");
                return ;
            }
    		logo = 1;
    	}   
    }
    //将账号存入磁盘
    void saveUser(void)
    {
        int i;
        FILE *fp;
        fp = fopen("账号.txt", "w");
        for(i = 0; i <= jj; i++){
            fprintf(fp, "%s\n", sta[i].AcName);
            fprintf(fp, "%s\n", sta[i].password);
            fprintf(fp, "%s\n", sta[i].nickname);
        }
        fclose(fp);
    }
    //新建账号
    void addUser(void)
    {
        FILE *fp;
        int j=0,i;
        char c[12],str[30];
        printf("\t\t\t请输入账号:\n\n\t\t\t  ");
        scanf("%s",str);
        for(i = 0; i < jj; i++){
            if(strcmp(sta[i].AcName, str) == 0){
                printf("\t\t\t该账号已被注册,请重新申请!!\n\n\t\t\t   ");
                system("PAUSE");
                return ;
            }
        }
        strcpy(sta[jj].AcName, str);
        printf("\t\t\t请输入密码(密码长度不超过十个字符):\n\n\t\t\t  ");
        scanf("%s", sta[jj].password);
        printf("\t\t\t请再输入一次密码:\n\n\t\t\t  ");
        scanf("%s",c);
        if(strcmp(sta[jj].password, c) != 0){
            printf("\t\t\t两次密码不一致请从新申请\n\n\t\t\t");
            system("PAUSE");
            system("cls");
            printf("\n");
            addUser();
    		j = 1;
        }
        if(j)
            return ;
        printf("\n\t\t\t请输入昵称\n\n\t\t\t  ");
        scanf("%s",sta[jj].nickname);
        saveUser();
        printf("\t\t\t\t账号申请成功!!\n\n\t\t\t");
        jj++;
        strcpy(kl->users, sta[jj-1].AcName);
        kl->sexes = 0;
        strcpy(kl->book[0].Name, "0");
        strcpy(kl->book[0].time, "0");
        kl->r = 100;
        kl->Next = NULL;
        hnj = kl;
        saveuu();
        loadBorrow(HEAD);
        saveBorrow(HEAD);
        system("PAUSE");
    }
    //找回密码
    void findPassword(void)
    {
        int i;
        char a[30];
        printf("\t\t\t请输入要找回的账号:\n\t\t\t\t");
        scanf("%s",a);
        for(i = 0; i < jj; i++)
            if(strcmp(sta[i].AcName, a) == 0){
                printf("\t\t\t密码:%s\n",sta[i].password);
                system("PAUSE");
                return ;
            }
        printf("\t\t\t\t查无此账号!!\n\n\t\t\t");
        system("PAUSE");
    }
    //修改密码
    void EditPassword(void)
    {
        int i,K=0,KK=0;
        char a[30];
        printf("\t\t\t  请输入要修改密码的账号:\n\t\t\t  ");
        scanf("%s",a);
        for(i = 0; i < jj; i++)
            if(strcmp(sta[i].AcName, a) == 0){
                printf("\n\t\t\t   请输入原密码:\n\t\t\t   ");
                scanf("%s",a);
                if(strcmp(sta[i].password, a) != 0){
                    printf("\n\t\t\t\t密码错误!!\n\n\t\t\t   ");
                    system("PAUSE");
                    system("cls");
                    return ;
                }
                printf("\n\t\t\t   请输入新密码:\n\t\t\t   ");
                scanf("%s",a);
                if(strcmp(sta[i].password, a) == 0){
                    printf("\n\t\t\t新密码与原密码重复,请从新修改!!\n\n\t\t\t   ");
                    system("PAUSE");
                    system("cls");
                    return ;
                }
                strcpy(sta[i].password, a);
                printf("\t\t\t   请输入下面的验证码:\n");
                srand((unsigned)time(NULL));
                K = rand();
                printf("\n\t\t\t\t  %d\n\t\t\t\t  ",K);
                oo = scanf("%d",&KK);
                if(!oo){
                	inwrong();
                	return ;
            	}
                if(KK != K){
                    printf("\n\t\t\t验证码错误!!\n");
                    system("PAUSE");
                    system("cls");
                    return ;
                }
                printf("\n\t\t\t\t修改密码成功!!\n");
                saveUser();
                system("PAUSE");
                system("cls");
                return ;
            }
        printf("\n\t\t\t\t查无此账号!!\n\n\t\t\t");
        system("PAUSE");
    
    }
    //将账号读入内存
    void loadUser(void)
    {
        int i;
        freopen("账号.txt", "r", stdin);
        for(i = 0; i < jj; i++){
            scanf("%s",sta[i].AcName);
            scanf("%s",sta[i].password);
            scanf("%s",sta[i].nickname);
        }
        freopen("CON", "r", stdin);
    }
    //输出账号菜单
    void printuser(void)
    {
        printf("\t\t\t************************************\n");
        printf("\t\t\t*    登录 请按 1                   *\n");
        printf("\t\t\t*    注册新账号 请按 2             *\n");
        printf("\t\t\t*    找回密码 请按 3               *\n");
        printf("\t\t\t*    修改密码 请按 4               *\n");
        printf("\t\t\t*    退出程序 请按 5               *\n");
        printf("\t\t\t************************************\n");
    }
    //账号登录
    int ling(void)
    {
        int sh,i;
        hnj=NULL, kl = new node;
        h = logo = 0;
        while(1){
                printuser();
                loadUser();
                loaduu();
                oo = scanf("%d",&sh);
                if(!oo){
                	inwrong();
                	continue;
                }
                switch(sh){
                case 1:
                    CheckUser(); break;
                case 2:
                    addUser(); saveuu(); system("cls"); break;
                case 3:
                    findPassword(); system("cls"); break;
                case 4:
                    EditPassword(); break;
                case 5:
                    system("cls");
                    printf("\n");
                    printf("\t\t\t欢迎下次使用小哥哥的图书管理系统\n"); return 0;
                default :
                	system("cls"); hhk();system("cls"); break;
            }
            if(logo)
                return 1;
            if(h == 3){
                printf("\t\t\t密码错误三次,系统将自动关闭!!\n\n");
                printf("\t\t\t欢迎下次使用小哥哥的图书管理系统\n");
                return 0;
            }
        }
    }
    
    //恢复出厂设置
    void Huifu(void)
    {
        beifen();
        saveuu();
        int i = num;
        freopen("图书信息库.txt", "r",stdin);
        for(i = 0; i < num; i++){
            scanf("%d",&stu[i].ID);
            scanf("%s",stu[i].name);
            scanf("%lf",&stu[i].price);
            scanf("%s",stu[i].author);
            scanf("%d",&stu[i].quan);
            scanf("%s",stu[i].itd);
        }
        freopen("CON", "r", stdin);
        save();
        printf("\n\n\t\t\t恢复成功!!\n");
        system("PAUSE");
        system("cls");
    }
    void PrintRecord(int i)//输出一条记录
    {
        printf("\t\t\t书号:%04d\n",stu[i].ID);
        printf("\t\t\t书名:%s\n",stu[i].name);
        printf("\t\t\t价格:%.2lf\n",stu[i].price);
        printf("\t\t\t作者:%s\n",stu[i].author);
        printf("\t\t\t库存:%d\n",stu[i].quan);
        printf("\n简介:%s\n\n",stu[i].itd);
    }
    
    //图书信息管理
    void Menu(void)
    {
        int select;
        system("cls");
        load();
        while(1){
            display();
            oo = scanf("%d",&select);
            if(!oo){
                inwrong();
                continue;
            }
            switch(select){
                case 1:
                    Find(); break;
                case 2:
                    Sort(); break;
                case 3:
                    edit(); break;
                case 4:
                    Huifu(); break;
                case 5:
                    Cpy(); break;
                case 6:
                    system("cls"); return ;
                default :
                	hhk(); system("cls"); break;
            }
        }
    }
    //显示图书信息管理菜单
    void display(void)
    {
        char str[3][20] = {"查找 请按 1","排序 请按 2","修改 请按 3"};
        int i,j;
        printf("\t   ************************************************************\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      您可以进行以下操作:                                 *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      查找 请按 1                                         *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      排序 请按 2                                         *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      修改 请按 3                                         *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      恢复图书信息 请按 4                                 *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      备份图书信息 请按 5                                 *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      返回上一级菜单 请按 6                               *\n");
        printf("\t   *                                                          *\n");
        printf("\t   ************************************************************\n\n");
    }
    //打印开发人员信息
    void Intropeople(void)
    {
        printf("\t   ************************************************************\n");
        printf("\t   *                                                          *\n");
        printf("\t   *                      开发人员信息                        *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *         计科二班 XXX                                    *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *         计科二班 XXX                                   *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *         计科二班 XXX                                   *\n");
        printf("\t   ************************************************************\n\n");
        system("PAUSE");
        system("cls");
    }
    
    void hhk(void)//打印操作错误
    {
    	printf("\n");
    	printf("\t\t\t  操作错误,请从新选择操作选项!!\n\n");
    	system("PAUSE");
    }
    
    //结束程序
    void over()
    {
        printf("\n\t\t\t29组图书管理系统祝您阅读愉快!!!\n");
    }
    
    //把图书信息加载到内存
    void load()
    {
        int i;
        freopen("缓存区.txt", "r", stdin);
        for(i = 0; i < num; i++){
            scanf("%d",&stu[i].ID);
            scanf("%s",stu[i].name);
            scanf("%lf",&stu[i].price);
            scanf("%s",stu[i].author);
            scanf("%d",&stu[i].quan);
            scanf("%s",stu[i].itd);
        }
    	freopen("CON", "r", stdin);
    }
    //将数据保存到磁盘
    void save()
    {
        int i;
        FILE *fp;
        fp = fopen("缓存区.txt", "w");
        for(i = 0; i < num; i++){
            fprintf(fp, "%d\n",stu[i].ID);
            fprintf(fp, "%s\n",stu[i].name);
            fprintf(fp, "%.2lf\n",stu[i].price);
            fprintf(fp, "%s\n",stu[i].author);
            fprintf(fp, "%d\n",stu[i].quan);
            fprintf(fp, "%s\n",stu[i].itd);
        }
        fclose(fp);
    }
    
    //输出修改菜单
    void PrinEdit()
    {
        printf("\t   ************************************************************\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      您可以进行以下操作:                                 *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      添加 请按 1                                         *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      删除一本图书 请按 2                                 *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      删除全部图书 请按 3                                 *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      返回上一级菜单 请按 4                               *\n");
        printf("\t   *                                                          *\n");
        printf("\t   ************************************************************\n\n");
    }
    void add()//添加
    {
        FILE *fp;
        fp = fopen("缓存区.txt","a");
        int n,p,i;
        double q;
        char str[30],st[1000];
        printf("\t\t\t   亲,请输入你需要添加几项\n\n\t\t\t    ");
        oo = scanf("%d",&n);
        if(!oo){
            inwrong();
            return ;
        }
        for(i = num+1; i <= num+n; i++){
            fprintf(fp, "%d\n",i);
            stu[i-1].ID = i;
            printf("\t\t\t   请输入书名\n\n\t\t\t    ");
            scanf("%s",str);
            strcpy(stu[i-1].name, str);
            fprintf(fp, "%s\n",str);
            printf("\t\t\t   请输入价格\n\n\t\t\t    ");
            scanf("%lf",&q);
            stu[i-1].price = q;
            fprintf(fp, "%.2lf\n",q);
            printf("\t\t\t   请输入作者\n\n\t\t\t    ");
            scanf("%s",str);
            strcpy(stu[i-1].author, str);
            fprintf(fp, "%s\n",str);
            printf("\t\t\t   请输入该书的数量\n\n\t\t\t    ");
            scanf("%d",&p);
            stu[i-1].quan = p;
            fprintf(fp, "%d\n",p);
            printf("\t\t\t   请输入该书的简介\n\n\t\t\t    ");
            scanf("%s",st);
            strcpy(stu[i-1].itd, st);
    
            fprintf(fp, "%s\n",st);
        }
        num += n;
        fclose(fp);
        save();
        saveuu();
        system("PAUSE");
    	system("cls");
    }
    void beifen(void)
    {
        FILE *fp;
        if((fp = fopen("删除.txt", "r")) == NULL){
            printf("数据库加载失败,请重启本系统!\n");
            return ;
        }
        fscanf(fp, "%d",&num);
        fclose(fp);
    }
    void shan(void)
    {
        FILE *fp;
        if((fp = fopen("删除.txt", "w")) == NULL){
            printf("数据库加载失败,请重启本系统!\n");
            return ;
        }
        fprintf(fp, "%d\n", num);
        fclose(fp);
    }
    //删除所有信息
    void DeleteAll()
    {
        FILE *fp;
        if((fp = fopen("缓存区.txt", "w")) == NULL){
            printf("数据库加载失败,请重启本系统!\n");
            return ;
        }
        fprintf(fp, "0");
        printf("\t\t\t删除成功,若想恢复请恢复备份!!\n\t\t\t");
        fclose(fp);
        num = 0;
        saveuu();
        system("PAUSE");
        system("cls");
    }
    void DeleteRecord()//删除一条信息
    {
        int j,i,flag = 0;
        printf("\t\t\t   请输入书号\n\t\t\t    ");
        oo = scanf("%d",&j);
        if(!oo){
            inwrong();
            return ;
        }
        if(j == num){
        	num--;
        	save();
        	printf("\t\t\t   删除成功!\n\t\t\t   ");
        	system("PAUSE");
        	system("cls");
        	return ;
    	}
        for(i = 0 ; i < num-1; i++){
            if(stu[i].ID == j)
                flag = 1;
            if(flag){
                strcpy(stu[i].name, stu[i+1].name);
                stu[i].price = stu[i+1].price;
                strcpy(stu[i].name, stu[i+1].name);
                stu[i].quan = stu[i+1].quan;
                strcpy(stu[i].itd, stu[i+1].itd);
            }
        }
    	num--;
    	save();
    	saveuu();
    	printf("\t\t\t删除成功!\n");
    	system("PAUSE");
    	system("cls");
    }
    //修改
    void edit()
    {
        system("cls");
        load();
        int i,sele;
        while(1){
            PrinEdit();
            oo = scanf("%d",&sele);
            if(!oo){
            	inwrong();
            	continue;
        	}
            switch(sele){
                case 1:
                    add(); break;
                case 2:
                    DeleteRecord(); break;
                case 3:
                    DeleteAll(); break;
                case 4:
                    system("cls"); return ;
                default :
                	system("cls"); hhk(); break;
            }
        }
    }
    
    //输出查找菜单
    void FindEdit()
    {
        printf("\t   ************************************************************\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      您可以进行以下操作:                                 *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      按书号查找 请按 1                                   *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      按书名查找 请按 2                                   *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      按作者查找 请按 3                                   *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      输出所有图书信息 请按 4                             *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      返回上一级菜单 请按 5                               *\n");
        printf("\t   *                                                          *\n");
        printf("\t   ************************************************************\n\n");
    }
    //按书号查找
    void FindByNum(void)
    {
        system("cls");
        if(num == 0){
            printf("\n\n\t\t\t数据库中暂没有图书信息,请添加图书信息\n\n\t\t\t   ");
            system("PAUSE");
            return ;
        }
        int i,sex;
        printf("\t\t\t   请输入要查找的书号:\n\n\t\t\t\t");
        oo = scanf("%d",&sex);
        if(!oo){
            inwrong();
            return ;
        }
        if(sex > num){
            printf("\t\t\t\t未找到该书!!\n\n\t\t\t   ");
            system("PAUSE");
            return ;
        }
        for(i = 0; i < num; i++){
            if(stu[i].ID == sex){
                PrintRecord(i);
                printf("\t\t\t   ");
                system("PAUSE");
                return;
            }
        }
    }
    //按书名查找
    void FindByName()
    {
        system("cls");
        if(num == 0){
            printf("\n\n\t\t\t数据库中暂没有图书信息,请添加图书信息\n\n\t\t\t   ");
            system("PAUSE");
            return ;
        }
        int i;
        char s[30];
        printf("\t\t\t   请输入要查找的书名:\n\n\t\t\t    ");
        scanf("%s",s);
        for(i = 0; i < num; i++){
            if(strcmp(stu[i].name, s) == 0){
                if(F == 1)
                    PrintRecord(i);
                else if(!F){
                    if(stu[i].quan == 0 && huan == 1)
                        F = 99998;
                    else if(stu[i].quan != 0 || huan == 0){
                        PrintRecord(i);
                        F = i;
                    }
                }
                printf("\t\t\t   ");
                system("PAUSE");
                return ;
            }
        }
        F = 99999;
        printf("\n\t\t\t   未找到该书!!\n");
        printf("\n\t\t\t   ");
        system("PAUSE");
    }
    //按作者查找
    void FindByAuthor()
    {
        system("cls");
        if(num == 0){
            printf("\n\n\t\t\t数据库中暂没有图书信息,请添加图书信息\n\n\t\t\t   ");
            system("PAUSE");
            return ;
        }
        int i;
        char s[30];
        printf("\t\t\t  请输入要查找的作者\n\n\t\t\t   ");
        scanf("%s",s);
        for(i = 0; i < num; i++){
            if(strcmp(stu[i].author, s) == 0){
                PrintRecord(i);
                printf("\t\t\t   ");
                system("PAUSE");
                return ;
            }
        }
        printf("\n\t\t\t\t未找到有关该作者的书!!\n\n\t\t\t   ");
        system("PAUSE");
    }
    //输出所有图书信息
    void output()
    {
        int i;
        if(num == 0){
            printf("\n\n\t\t\t数据库中暂没有图书信息,请添加图书信息\n\n\t\t\t   ");
            system("PAUSE");
            system("cls");
            return ;
        }
        for(i = 0; i < num; i++){
            PrintRecord(i);
        }
        printf("\t\t\t   ");
        system("PAUSE");
    }
    //查找
    void Find()
    {
        system("cls");
        int i,sclele;
        F = 1;
        while(1){
            FindEdit();
            oo = scanf("%d",&sclele);
            if(!oo){
            	inwrong();
            	continue;
        	}
            switch(sclele){
                case 1:
                    FindByNum(); break;
                case 2:
                    FindByName(); break;
                case 3:
                    FindByAuthor(); break;
                case 4:
                    output(); break;
                case 5:
                    system("cls"); return ;
                default :
                	system("cls"); hhk(); break;
            }
            system("cls");
        }
    }
    
    //排序
    void Sort()
    {
        system("cls");
        int sexh;
        while(1){
            system("cls");
            PrintSort();
            oo = scanf("%d",&sexh);
            if(!oo){
            	inwrong();
            	continue;
        	}
            switch(sexh){
                case 1:
                    SortByScore(); break;
                case 2:
                    AscendVyPick(); break;
                case 3:
                    DesendByPick(); break;
                case 4:
                     system("cls"); return ;
                default :
                	system("cls"); hhk(); break;
            }
        }
    }
    //输出排序菜单
    void PrintSort()
    {
        printf("\t   ************************************************************\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      您可以进行以下操作:                                 *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      按书名首字母排序 请按 1                             *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      按单价升序排序 请按 2                               *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      按单价降序排序 请按 3                               *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      返回上一级菜单 请按 4                               *\n");
        printf("\t   *                                                          *\n");
        printf("\t   ************************************************************\n\n");
    }
    //按书名首字母排序判断
    int cmp1(library a, library b)
    {
        if(strcmp(a.name, b.name) == -1)
            return 1;
        else
            return 0;
    }
    //按单价升序排序判断
    int cmp2(library a, library b)
    {
        return a.price < b.price;
    }
    //按单价降序排序判断
    int cmp3(library a, library b)
    {
        return a.price > b.price;
    }
    //重新整理书号
    void IdArrange()
    {
        int i;
        for(i = 0; i < num; i++)
            stu[i].ID = i+1;
    }
    //按书名首字母排序
    void SortByScore()
    {
        int i;
        sort(stu, stu+num, cmp1);
        IdArrange();
        save();
        printf("\n\t\t\t\t排序完成!!\n\n\t\t\t   ");
        system("PAUSE");
    }
    //按单价升序排序
    void AscendVyPick()
    {
        int i;
        sort(stu, stu+num, cmp2);
        IdArrange();
        save();
        printf("\n\t\t\t\t排序完成!!\n\n\t\t\t   ");
        system("PAUSE");
    }
    //按单价降序排序
    void DesendByPick()
    {
        int i;
        sort(stu, stu+num, cmp3);
        IdArrange();
        save();
        printf("\n\t\t\t\t排序完成!!\n\n\t\t\t   ");
        system("PAUSE");
    }
    
    //打印借书菜单
    void PrintBorrow(void)
    {
        printf("\t   ************************************************************\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      您可以进行以下操作:                                 *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      借书记录查询 请按 1                                 *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      图书借阅 请按 2                                     *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      图书归还 请按 3                                     *\n");
        printf("\t   *                                                          *\n");
        printf("\t   *      返回上一级菜单 请按 4                               *\n");
        printf("\t   *                                                          *\n");
        printf("\t   ************************************************************\n\n");
    }
    //将用户借书记录加载到磁盘
    void saveBorrow(L head)
    {
        int i;
        L p = head->Next;
    	FILE *fp;
    	fp = fopen("借书记录.txt", "w");
    	while(p){
            fprintf(fp, "%s\n", p->users);
            fprintf(fp, "%d\n", p->sexes);
            for(i = 0; i < p->sexes; i++){
                fprintf(fp, "%s\n", p->book[i].Name);
                fprintf(fp, "%s\n", p->book[i].time);
            }
            fprintf(fp, "%d\n", p->r);
            p = p->Next;
    	}
    	fclose(fp);
    }
    //将借书记录加载到内存
    void loadBorrow(L head)
    {
    	int i,j;
    	L p, rear = head;
    	freopen("借书记录.txt", "r", stdin);
    	for(i = 0; i < k; i++){
    		p = new node;
    		scanf("%s",p->users);
    		scanf("%d",&p->sexes);
    		for(j = 0; j < p->sexes; j++){
    			scanf("%s",p->book[j].Name);
    			scanf("%s",p->book[j].time);
    		}
    		scanf("%d\n",&p->r);
    		rear->Next = p;
    		rear = p;
    	}
    	rear->Next = NULL;
    	freopen("CON", "r", stdin);
    	if(hnj != NULL){
    		rear->Next = kl;
            rear = kl;
    	}
    	rear->Next = NULL;
    	saveBorrow(head);
    }
    //用户搜索
    L LookUser(L head)
    {
        L p = head;
        while(p){
            p = p->Next;
            if(strcmp(p->users, strr) == 0)
                break;
        }
        return p;
    }
    //借书记录
    void BorrowRecord(L q)
    {
    	int i;
    	system("cls");
    	printf("\t\t借书的数量:%d\n\n",q->sexes);
    	for(i = 0; i < q->sexes; i++){
    		printf("\t\t%d.%s\n",i+1, q->book[i].Name);
    		printf("\t\t  借书时间:%s\n\n",q->book[i].time);
    	}
    	printf("\t\t信誉值:%d\n\n",q->r);
    	printf("\t\t\t   ");
    	system("PAUSE");
    	system("cls");
    }
    
    //借书
    void BorrowBook(L q, L y)
    {
        int o,i;
        char str[30];
        huan = 1;
        system("cls");
        if(q->r < 60){
            printf("\n\n");
            printf("\t\t\t信誉值低于60,不能进行借书操作!!\n\n\t\t\t   ");
            system("PAUSE");
            system("cls");
            return ;
        }
        F = 0;
        FindByName();
        if(F == 99998){
            printf("\n");
            printf("\t\t\tSORRY,该书已没有库存!!\n\n\t\t\t   ");
            system("PAUSE");
            system("cls");
            F = 1;
            return ;
        }
        else if(F == 99999){
            system("cls");
            return ;
        }
        strcpy(q->book[q->sexes].Name, stu[F].name);
        stu[F].quan--;
        printf("\n\t\t请输入借书时间(格式为year/month/day):\n\n\t\t\t ");
        scanf("%s",str);
        strcpy(q->book[q->sexes].time, str);
        q->sexes++;
        F = 1;
        save();
        saveBorrow(y);
        printf("\n\t\t\t\t借书成功!!\n\n\t\t\t   ");
        system("PAUSE");
        system("cls");
    }
    //还书
    void SendBook(L q, L y)
    {
        system("cls");
        int i,kk=0,flag = 1;
        char st[30];
        F = huan = 0;
        if(q->sexes == 0){
            printf("\n\t\t\t  您还没有借书哦!!\n\n\t\t\t   ");
            system("PAUSE");
            system("cls");
            return ;
        }
        FindByName();
        if(F == 99999){
            system("cls");
            return ;
        }
        for(i = 0; i < q->sexes; i++)
            if(strcmp(q->book[i].Name, stu[F].name) == 0)
                flag = 0;
        if(flag){
            system("cls");
            printf("\n\t\t\t  您还没有借该书哦!!\n\n\t\t\t   ");
            system("PAUSE");
            system("cls");
            return ;
        }
        for(i = 0; i < q->sexes; i++){
            if(strcmp(q->book[i].Name, stu[F].name) == 0 && kk == 0){
            	strcpy(st, q->book[i].time);
                if(i == q->sexes-1)
                    break;
                kk = 1;
            }
            if(kk){
                strcpy(q->book[i].Name, q->book[i+1].Name);
                strcpy(q->book[i].time, q->book[i+1].time);
            }
        }
        q->sexes--;
        stu[F].quan++;
        save();
        for(i = 1; i <= 16; i++)
        	printf(" ");
        printf("\t\t\t借书时间:%s\n\n",st);
        printf("\t\t   请管理员判断是否逾期还书或图书有破损\n\n\t\t\t     ");
        system("PAUSE");
        printf("\n\t\t   按时还书 请按 1\n\n");
        printf("\t\t   逾期还书但不超过一个工作日 请按 2\n\n");
        printf("\t\t   还书时间超过一个工作日 请按 3\n\n");
        printf("\t\t   图书有破损 请按 4\n\n\t\t    ");
        scanf("%d",&kk);
    	if(kk == 1)
            printf("\n\t\t\t\t感谢您的使用!!\n\n");
    	else if(kk == 2){
    		q->r -= 5;
    		if(q->r < 60)
    			printf("由于您的不良行为较多,信誉值已不足60,本年度将不能在本系统借书!!\n\n");
    		else
    			printf("请保持良好的借书行为,信誉不足将无法在本系统借书!!\n\n");
    	}
    	else if(kk == 3){
    		q->r = 0;
    		printf("由于您的还书时间超过规定时间一个工作日,所以本年度将不能在本系统借书!!\n\n");
    	}
    	else if(kk == 4){
    		q->r -= 10;
    		printf("\t\t\t由于图书有破损,请原价赔偿!!\n\n");
    		for(i = 0; i < num; i++)
    		    if(strcmp(stu[i].name, stu[F].name) == 0){
    		    	printf("\t\t\t\t原价:%.2lf\n\n",stu[i].price);
    		    	break;
    			}
            if(q->r < 60)
    			printf("由于您的不良行为较多,信誉值已不足60,本年度将不能在本系统借书!!\n\n");
    		else
    			printf("请保持良好的借书行为,信誉不足将无法在本系统借书!!\n\n");
    	}
    	saveBorrow(y);
    	printf("\t\t\t   ");
        system("PAUSE");
    	system("cls");
    }
    //图书借还系统
    void Borrow(void)
    {
    	system("cls");
    	int shl,i;
    	L head = new node;
    	loadBorrow(head);
    	pre = LookUser(head);
    	while(1){
    		PrintBorrow();
    		oo = scanf("%d", &shl);
    		if(!oo){
            	inwrong();
            	continue;
        	}
    		switch(shl){
    			case 1:
    				BorrowRecord(pre); break;
    			case 2:
    				BorrowBook(pre, head); break;
    			case 3:
    				SendBook(pre, head); break;
    			case 4:
    				system("cls"); return ;
    			default :
    				system("cls"); hhk(); break;
    		}
    	}
    }
    
    

     

     

     

     

     

    展开全文
  • 朋友让帮忙一个C语言图书管理系统。但是在网上一下都是很多错的。我了一个回来,将错误都修改了。用VC6编译通过,添加图书,删除图书,添加读者,借书,还书,还有借书统计,还有学生统计,我都测试过了。...
  • 这是本人大一第二学期初C语言课程设计的作品,嘿嘿,本来以为已经不到原稿了,今天无意中竟然在QQ网络硬盘中找到了当初的teta版,发布于此,以作纪念。 C 源代码如下: #include #include #include struct book{ ...
  • 了很长时间找到别人一个能用的,稍作修改,可以作为数据结构大作业~~~~~~~~~~~~~~~~~~
  • C语言图书管理系统原程序

    热门讨论 2009-07-04 04:43:54
    非常详细的 C语言程序!!!可以用 /*12. bookfunction.c源程序*/ /*** bookfunction.c***/ /*添加图书*/ #include "c13_book.c" void BookAdd() { FILE *fp; Book consultbook; fp=fopen("book.txt","rb");/*读...
  • C语言实例精粹,有190个程序,前面是比较简单的程序适合初学者,后面程序较复杂。具体目录不到了,不过看一下程序就清楚。有图书管理系统、成绩管理系统。(C语言程序,rar压缩文件)
  • 这是本人大一第二学期初C语言课程设计的作品,嘿嘿,本来以为已经不到原稿了,今天无意中居然在QQ网络硬盘中找到了当初的teta版,公布于此,以作纪念。 C源码例如以下: #include<stdio.h> #...

    这是本人大一第二学期初C语言课程设计的作品,嘿嘿,本来以为已经找不到原稿了,今天无意中居然在QQ网络硬盘中找到了当初的teta版,公布于此,以作纪念。

     

    图一

     

     

    C源码例如以下:

    #include<stdio.h> #include<stdlib.h> #include<string.h> struct book{ char book_name[30]; int bianhao; double price; char author[20]; char state[20]; char name[20]; char sex[10]; int xuehao; struct book *book_next; }; struct club{ char name[20]; char sex[10]; int xuehao; char borrow[30]; struct club *club_next; }; void Print_Book(struct book *head_book);/*浏览全部图书信息*/ void Print_Club(struct club *head_club);/*浏览全部会员信息*/ struct book *Create_New_Book();/*创建新的图书库,图书编号输入为0时结束*/ struct book *Search_Book_bianhao(int bianhao,struct book *head_book); struct book *Search_Book_name(char *b_name,struct book *head_book); struct book *Search_Book_price(double price_h,double price_l,struct book *head_book); struct book *Insert_Book(struct book *head_book,struct book *stud_book);/*添加图书,逐个加入*/ struct book *Delete_Book(struct book *head_book,int bianhao);/*删除图书*/ struct club *Create_New_Club(); struct club *Search_Club_xuehao(int xuehao,struct club *head_club); struct club *Search_Club_name(char *c_name,struct club *head_club); struct club *Insert_Club(struct club *head_club,struct club *stud_club); struct club *Delete_Club(struct club *head_club,int xuehao); struct book *Lent_Book(int bianhao,int xuehao,struct book *head_book,struct club *head_club); struct book *back(int bianhao,int xuehao,struct book *head_book,struct club *head_club); int main() { struct book *head_book,*p_book; char book_name[30],name[20],author[20],sex[10]; int bianhao; double price,price_h,price_l; int size_book=sizeof(struct book); int m=1,n=1,f; char *b_name,*c_name; struct club *head_club,*p_club; int xuehao; int size_club=sizeof(struct club); int choice; printf("/n欢迎您第一次进入图书管理系统!/n/n"); printf("----->[向导]----->[新建图书库]/n/n"); printf("注意:当输入图书编号为0时,进入下一步./n/n"); head_book=Create_New_Book(); system("cls"); printf("/n欢迎您第一次进入图书管理系统!/n/n"); printf("----->[向导]----->[新建会员库]/n/n"); printf("注意:当输入会员学号为0时,进入主菜单./n/n"); head_club=Create_New_Club(); system("cls"); do{ printf("/n/t/t/t〓〓〓〓〓图书管理系统〓〓〓〓〓/n/n"); printf("/n"); printf("/t/t/t[1]:借书办理/t");printf(" [6]:还书办理/n"); printf("/n"); printf("/t/t/t[2]:查询图书/t");printf(" [7]:查询会员/n"); printf("/t/t/t[3]:加入图书/t");printf(" [8]:加入会员/n"); printf("/t/t/t[4]:删除图书/t");printf(" [9]:删除会员/n"); printf("/t/t/t[5]:遍历图书/t");printf("[10]:遍历会员/n/n"); printf("/t/t/t〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓/n/n"); printf("/t/t/t0:退出/n/n"); printf("请选择<0~10>:"); scanf("%d",&choice); switch(choice){ case 1: printf("/n/t/t/t〓〓〓〓〓图书管理系统〓〓〓〓〓/n/n"); printf("输入所借图书编号:/n"); scanf("%d",&bianhao); printf("输入借书人的学号:/n"); scanf("%d",&xuehao); head_book=Lent_Book(bianhao,xuehao,head_book,head_club); system("cls"); printf("/n借阅成功!/n/n"); printf("相关信息例如以下:/n/n"); head_book=Search_Book_bianhao(bianhao,head_book); break; case 2: system("cls"); printf("/n/t/t/t〓〓〓〓〓图书管理系统〓〓〓〓〓/n/n"); printf("1.按编号查询/n/n"); printf("2.按名称查询/n/n"); printf("3.按价格区间查询/n/n"); printf("0.返回主菜单/n/n"); printf("请选择:"); scanf("%d",&f); if(f==1){ printf("请输入查询图书编号:"); scanf("%d",&bianhao); printf("相关信息例如以下:/n/n"); head_book=Search_Book_bianhao(bianhao,head_book); break; } else if(f==2){ b_name=book_name; getchar(); printf("请输入查询图书名称:"); gets(b_name); printf("相关信息例如以下:/n/n"); head_book=Search_Book_name(b_name,head_book); break; } else if(f==3){ printf("请输入最高价格:"); scanf("%lf",&price_h); printf("请输入最低价格:"); scanf("%lf",&price_l); printf("相关信息例如以下:/n/n"); head_book=Search_Book_price(price_h,price_l,head_book); break; } else if(f==0){ break; } break; case 6: printf("/n/t/t/t〓〓〓〓〓图书管理系统〓〓〓〓〓/n/n"); printf("输入所还图书编号:/n"); scanf("%d",&bianhao); printf("输入还书人的学号:/n"); scanf("%d",&xuehao); head_book=back(bianhao,xuehao,head_book,head_club); system("cls"); printf("/n归还成功!/n/n"); printf("相关信息例如以下:/n/n"); head_book=Search_Book_bianhao(bianhao,head_book); break; case 3: system("cls"); printf("/n/t/t/t〓〓〓〓〓图书管理系统〓〓〓〓〓/n/n"); printf("请输入图书名称:"); scanf("%s",book_name); printf("请输入图书编号:"); scanf("%d",&bianhao); printf("请输入单位价格:"); scanf("%lf",&price); printf("请输入作者名字:"); scanf("%s",author); printf("/n"); struct book *ptr_b; for(ptr_b=head_book;ptr_b;ptr_b=ptr_b->book_next) { if(ptr_b->bianhao==bianhao) { printf("此编号图书已存在/n"); m=0; break; } } if(m){ p_book=(struct book *)malloc(size_book); strcpy(p_book->book_name,book_name); p_book->bianhao=bianhao; p_book->price=price; p_book->xuehao=0; strcpy(p_book->author,author); strcpy(p_book->state,"存在"); strcpy(p_book->sex,"待定"); strcpy(p_book->name,"待定"); head_book=Insert_Book(head_book,p_book); printf("/n加入图书成功!/n/n"); } break; case 4: system("cls"); printf("/n/t/t/t〓〓〓〓〓图书管理系统〓〓〓〓〓/n/n"); printf("输入删除图书编号:/n"); scanf("%d",&bianhao); head_book=Delete_Book(head_book,bianhao); printf("/n删除图书成功!/n/n"); break; case 5: system("cls"); printf("/n/t/t/t〓〓〓〓〓图书管理系统〓〓〓〓〓/n/n"); Print_Book(head_book); break; case 7: system("cls"); printf("/n/t/t/t〓〓〓〓〓图书管理系统〓〓〓〓〓/n/n"); printf("1.按学号查询/n/n"); printf("2.按姓名查询/n/n"); printf("0.返回主菜单/n/n"); printf("请选择:"); scanf("%d",&f); if(f==1){ printf("请输入查询会员学号:"); scanf("%d",&xuehao); printf("相关信息例如以下:/n/n"); head_club=Search_Club_xuehao(xuehao,head_club); break; } else if(f==2){ c_name=name; getchar(); printf("请输入查询会员姓名:"); gets(c_name); printf("相关信息例如以下:/n/n"); head_club=Search_Club_name(c_name,head_club); break; } else if(f==0){ break; } break; printf("请输入查询会员学号:/n"); scanf("%d",&xuehao); printf("相关信息例如以下:/n/n"); break; case 8: system("cls"); printf("/n/t/t/t〓〓〓〓〓图书管理系统〓〓〓〓〓/n/n"); printf("请输入会员名字:"); scanf("%s",name); printf("请输入会员性别:"); scanf("%s",sex); printf("请输入会员学号:"); scanf("%d",&xuehao); printf("/n"); struct club *ptr_c; for(ptr_c=head_club;ptr_c;ptr_c=ptr_c->club_next) { if(ptr_c->xuehao==xuehao) { printf("此学号会员已存在/n"); n=0; break; } } if(n){ p_club=(struct club *)malloc(sizeof(struct club)); strcpy(p_club->name,name); strcpy(p_club->sex,sex); p_club->xuehao=xuehao; strcpy(p_club->borrow,"暂无"); head_club=Insert_Club(head_club,p_club); printf("/n加入会员成功!/n/n"); } break; case 9: system("cls"); printf("/n/t/t/t〓〓〓〓〓图书管理系统〓〓〓〓〓/n/n"); printf("输入要删除会员学号:/n"); scanf("%d",&xuehao); head_club=Delete_Club(head_club,xuehao); printf("/n删除会员成功!/n/n"); break; case 10: system("cls"); printf("/n/t/t/t〓〓〓〓〓图书管理系统〓〓〓〓〓/n/n"); Print_Club(head_club); break; case 0: system("cls"); printf("/n/t/t/t〓〓〓〓〓图书管理系统〓〓〓〓〓/n/n"); printf("/n谢谢您的使用!/n/n"); break; } }while(choice!=0); return 0; } struct book *Create_New_Book() { struct book *head_book,*p_book; int bianhao; double price; char book_name[30],author[20]; int size_book=sizeof(struct book); head_book=NULL; printf("请输入图书名称:"); scanf("%s",book_name); printf("请输入图书编号:"); scanf("%d",&bianhao); printf("请输入单位价格:"); scanf("%lf",&price); printf("请输入作者名字:"); scanf("%s",author); printf("/n"); while(bianhao!=0){ p_book=(struct book *)malloc(size_book); strcpy(p_book->book_name,book_name); p_book->bianhao=bianhao; p_book->price=price; p_book->xuehao=0; strcpy(p_book->author,author); strcpy(p_book->state,"存在"); strcpy(p_book->sex,"待定"); strcpy(p_book->name,"待定"); head_book=Insert_Book(head_book,p_book); printf("请输入图书名称:"); scanf("%s",book_name); printf("请输入图书编号:"); scanf("%d",&bianhao); printf("请输入单位价格:"); scanf("%lf",&price); printf("请输入作者名字:"); scanf("%s",author); printf("/n"); } return head_book; } struct book *Search_Book_bianhao(int bianhao,struct book *head_book) { struct book *ptr_book; int flag=0; for(ptr_book=head_book;ptr_book;ptr_book=ptr_book->book_next) { if(ptr_book->bianhao==bianhao){ printf("图书编号:%d/n",ptr_book->bianhao); printf("图书名称:%s/n",ptr_book->book_name); printf("图书单位价格:%.2lf/n",ptr_book->price); printf("图书作者:%s/n",ptr_book->author); printf("存在状态:%s/n",ptr_book->state); printf("借书人姓名:%s/n",ptr_book->name); printf("借书人性别:%s/n",ptr_book->sex); printf("学号:%d/n",ptr_book->xuehao); printf("/n"); flag++; } } if(flag==0){ printf("暂无此图书信息!/n/n"); } return head_book; } struct book *Search_Book_name(char *b_name,struct book *head_book) { struct book *ptr_book; int flag=0; for(ptr_book=head_book;ptr_book;ptr_book=ptr_book->book_next) { if(strcmp(ptr_book->book_name,b_name)==0){ printf("图书编号:%d/n",ptr_book->bianhao); printf("图书名称:%s/n",ptr_book->book_name); printf("图书单位价格:%.2lf/n",ptr_book->price); printf("图书作者:%s/n",ptr_book->author); printf("存在状态:%s/n",ptr_book->state); printf("借书人姓名:%s/n",ptr_book->name); printf("借书人性别:%s/n",ptr_book->sex); printf("学号:%d/n",ptr_book->xuehao); printf("/n"); flag++; } } if(flag==0){ printf("暂无此图书信息!/n/n"); } return head_book; } struct book *Search_Book_price(double price_h,double price_l,struct book *head_book) { struct book *ptr_book; int flag=0; for(ptr_book=head_book;ptr_book;ptr_book=ptr_book->book_next) { if((ptr_book->price>=price_l)&&(ptr_book->price<=price_h)){ printf("图书编号:%d/n",ptr_book->bianhao); printf("图书名称:%s/n",ptr_book->book_name); printf("图书单位价格:%.2lf/n",ptr_book->price); printf("图书作者:%s/n",ptr_book->author); printf("存在状态:%s/n",ptr_book->state); printf("借书人姓名:%s/n",ptr_book->name); printf("借书人性别:%s/n",ptr_book->sex); printf("学号:%d/n",ptr_book->xuehao); printf("/n"); flag++; } } if(flag==0){ printf("暂无此图书信息!/n/n"); } return head_book; } struct book *Delete_Book(struct book *head_book,int bianhao) { struct book *ptr1_book,*ptr2_book; while(head_book!=NULL && head_book->bianhao==bianhao){ ptr2_book=head_book; head_book=head_book->book_next; free(ptr2_book); } if(head_book==NULL) return NULL; ptr1_book=head_book; ptr2_book=head_book->book_next; while(ptr2_book!=NULL){ if(ptr2_book->bianhao==bianhao){ ptr1_book->book_next=ptr2_book->book_next; free(ptr2_book); } else ptr1_book=ptr2_book; ptr2_book=ptr1_book->book_next; } return head_book; } struct club *Create_New_Club() { struct club *head_club,*p_club; int xuehao; char name[20],sex[10]; int size_club=sizeof(struct club); head_club=NULL; printf("请输入会员名字:"); scanf("%s",name); printf("请输入会员性别:"); scanf("%s",sex); printf("请输入会员学号:"); scanf("%d",&xuehao); printf("/n"); while(xuehao!=0){ p_club=(struct club *)malloc(size_club); strcpy(p_club->name,name); strcpy(p_club->sex,sex); p_club->xuehao=xuehao; strcpy(p_club->borrow,"暂无"); head_club=Insert_Club(head_club,p_club); printf("请输入会员名字:"); scanf("%s",name); printf("请输入会员性别:"); scanf("%s",sex); printf("请输入会员学号:"); scanf("%d",&xuehao); printf("/n"); } return head_club; } struct club *Search_Club_xuehao(int xuehao,struct club *head_club) { struct club *ptr_club; int flag=0; for(ptr_club=head_club;ptr_club;ptr_club=ptr_club->club_next) { if(ptr_club->xuehao==xuehao){ printf("会员姓名:%s/n",ptr_club->name); printf("会员性别:%s/n",ptr_club->sex); printf("会员学号:%d/n",ptr_club->xuehao); printf("所借图书:%s/n",ptr_club->borrow); printf("/n"); flag++; } } if(flag==0){ printf("此用户不存在!/n/n"); } return head_club; } struct club *Search_Club_name(char *c_name,struct club *head_club) { struct club *ptr_club; int flag=0; for(ptr_club=head_club;ptr_club;ptr_club=ptr_club->club_next) { if(strcmp(ptr_club->name,c_name)==0){ printf("会员姓名:%s/n",ptr_club->name); printf("会员性别:%s/n",ptr_club->sex); printf("会员学号:%d/n",ptr_club->xuehao); printf("所借图书:%s/n",ptr_club->borrow); printf("/n"); flag++; } } if(flag==0){ printf("此用户不存在!/n/n"); } return head_club; } struct book *Lent_Book(int bianhao,int xuehao,struct book *head_book,struct club *head_club) { struct book *ptr_book; struct club *ptr_club; int flag=0; for(ptr_book=head_book;ptr_book;ptr_book=ptr_book->book_next) for(ptr_club=head_club;ptr_club;ptr_club=ptr_club->club_next) { if((ptr_book->bianhao==bianhao)&&(ptr_club->xuehao==xuehao)) { strcpy(ptr_book->name,ptr_club->name); /*字符串的复制,把右边的内容拷贝到左边*/ strcpy(ptr_book->sex,ptr_club->sex); ptr_book->xuehao=ptr_club->xuehao; strcpy(ptr_book->state,"暂无"); strcpy(ptr_club->borrow,ptr_book->book_name); flag++; } if(flag==0){ printf("暂无此图书或您还未注冊为会员!/n/n"); } } return head_book; } struct book *back(int bianhao,int xuehao,struct book *head_book,struct club *head_club) { struct book *ptr_book; struct club *ptr_club; int flag=0; for(ptr_book=head_book;ptr_book;ptr_book=ptr_book->book_next) for(ptr_club=head_club;ptr_club;ptr_club=ptr_club->club_next) { if((ptr_book->bianhao==bianhao) && (ptr_club->xuehao==xuehao)) { strcpy(ptr_book->name,"暂无"); strcpy(ptr_book->sex,"待定"); ptr_book->xuehao=0; strcpy(ptr_book->state,"暂无"); strcpy(ptr_club->borrow,"暂无"); flag++; } if(flag==0){ printf("输入有误,请重试/n/n"); } } return head_book; } struct book *Insert_Book(struct book *head_book,struct book *stud_book) { struct book *ptr_b,*ptr1_b,*ptr2_b; ptr2_b=head_book; ptr_b=stud_book; if(head_book==NULL){ head_book=ptr_b; head_book->book_next=NULL; } else{ while((ptr_b->bianhao > ptr2_b->bianhao) && (ptr2_b->book_next!=NULL)){ ptr1_b=ptr2_b; ptr2_b=ptr2_b->book_next; } if(ptr_b->bianhao <= ptr2_b->bianhao){ if(head_book==ptr2_b) head_book=ptr_b; else ptr1_b->book_next=ptr_b; ptr_b->book_next=ptr2_b; } else{ ptr2_b->book_next=ptr_b; ptr_b->book_next=NULL; } } return head_book; } struct club *Insert_Club(struct club *head_club,struct club *stud_club) { struct club *ptr_c,*ptr1_c,*ptr2_c; ptr2_c=head_club; ptr_c=stud_club; if(head_club==NULL){ head_club=ptr_c; head_club->club_next=NULL; } else{ while((ptr_c->xuehao > ptr2_c->xuehao) && (ptr2_c->club_next!=NULL)){ ptr1_c=ptr2_c; ptr2_c=ptr2_c->club_next; } if(ptr_c->xuehao <= ptr2_c->xuehao){ if(head_club==ptr2_c) head_club=ptr_c; else ptr1_c->club_next=ptr_c; ptr_c->club_next=ptr2_c; } else{ ptr2_c->club_next=ptr_c; ptr_c->club_next=NULL; } } return head_club; } void Print_Club(struct club *head_club) { struct club *ptr_c; if(head_club==NULL){ printf("/n无记录/n/n"); return; } printf("/n会员姓名/t会员性别/t会员学号/n/n"); for(ptr_c=head_club;ptr_c;ptr_c=ptr_c->club_next) printf("%s/t/t%s/t/t%d/n",ptr_c->name,ptr_c->sex,ptr_c->xuehao); } struct club *Delete_Club(struct club *head_club,int xuehao) { struct club *ptr1_club,*ptr2_club; while(head_club!=NULL && head_club->xuehao==xuehao){ ptr2_club=head_club; head_club=head_club->club_next; free(ptr2_club); } if(head_club==NULL) return NULL; ptr1_club=head_club; ptr2_club=head_club->club_next; while(ptr2_club!=NULL){ if(ptr2_club->xuehao==xuehao){ ptr1_club->club_next=ptr2_club->club_next; free(ptr2_club); } else ptr1_club=ptr2_club; ptr2_club=ptr1_club->club_next; } return head_club; } void Print_Book(struct book *head_book) { struct book *ptr_b; if(head_book==NULL){ printf("/n无记录/n/n"); return; } printf("/n图书编号/t图书名称/t图书单位价格/t图书作者/n/n"); for(ptr_b=head_book;ptr_b;ptr_b=ptr_b->book_next) printf("%d/t/t%s/t/t%.2lf/t/t%s/n/n",ptr_b->bianhao,ptr_b->book_name,ptr_b->price,ptr_b->author); }

    转载于:https://www.cnblogs.com/gcczhongduan/p/4249036.html

    展开全文
  • 有10本图书,从键盘输入每本图书的价格后,出价格最高的图书并输出其价格 案例输入 10.0 25.3 24.6 23.1 25.6 33.1 32.0 22.0 25.0 66.3 案例输出 Maximum book number=10 highest price=66.30` 代码 #...

    图书问题(数组+函数)

    • 问题描述

    有10本图书,从键盘输入每本图书的价格后,找出价格最高的图书并输出其价格

    • 案例输入
    10.0 25.3 24.6 23.1 25.6 33.1 32.0 22.0 25.0 66.3
    • 案例输出
    Maximum book number=10
    highest price=66.30`
    • 例题分析

    参考文档

    double类型数组
    定义字母寻找
    图书问题
    价格
    最高价格及位置
    单层for循环
    • 代码
    #include<stdio.h>
    
    void zuigao(int i,int j)
    {
        double a[10],max;
        int k=0;
        for(i=0;i<10;i++{
           if(max<a[i])
           {
    	  max=a[i];
    	  k=i+1;            //标记第几名是最大的
    	}
        }
        printf("Maximum book number=%d\nhighest price=%.2f",k,max);
    }
    int main()
    {
       int i,j;
       zuigao(i,j);
       return 0;
    } 
    展开全文
  • C语言程序设计期末实训作业,选择题目是做一个图书信息管理系统。 用链表设计,写的比较糙。repo 中附上了实训报告的思维导图、图片等资料。 源码用的是 gb2312,注意在编辑器中调节,以免中文注释乱码。 最后祝...

    C语言程序设计期末实训作业,选择题目是做一个图书信息管理系统

    用链表设计,写的比较糙。repo 中附上了实训报告的思维导图、图片等资料。

    源码用的是 gb2312,注意在编辑器中调节,以免中文注释乱码。

    最后祝找(chao)实训作业能期末pass!

    源码在这里:skyedai910/Library_System

    展开全文
  • printf("-------------【图书信息管理系统】-----------\n"); printf("\t\t1.录入图书信息\n"); printf("\t\t2.浏览图书信息\n"); printf("\t\t3.修改图书信息\n"); printf("\t\t4.删除图书信息\n"); ...
  • C语言学习心得.docx

    2020-07-06 16:53:31
    C语言学习心得 c语言学习心得1 还记得刚上第一节c语言课的时候基本上一节课只有最后10分钟的内容听懂了在此之前从没接触过c语言想说看看书预习一下吧可是完全不到条理发现老师也不是按书上的顺序讲的当时就特别...
  • 从2000年进入大学至今学习计算机已经有11年余,本科的专业是计算机科学与技术,初...于是,在国庆节期间,老师补习了几天的计算机基础,在前2-3个月学习汇编,和c程序设计,感觉都是似懂非懂,不懂的专业术语赶快宿
  • C语言源代码的图书管理系统 #include #include #include #include struct bookData { int booknumber; char bookname[30]; int store; }; struct Person { char name[20]; char studynumber[10]; int count; ...
  • C语言可以这样学

    2018-07-18 19:39:52
    曾在一次逛图书馆,想一本关于C语言的书,然后就选择了手上这本《C语言可以这样学》。选择这本书的原因,一方面是因为名字比较吸引我吧,另一个方面,这本书是清华大学出版社的,相信它的价值还是很高的。从今天起...
  • 我知道你要的是一个图书馆。如果你不到一个(:: boggle ::,你认为这是一个已经解决的问题!),这里有一个解决方案的大纲:您应该能够编写代码生成器[1]来序列化树/图,而无需(运行时)预处理相当简单。您需要解析...
  • 这是我的第一篇博客,就写写最近为了工作做题的感觉吧。...买了2本编程的圣经《算法导论》和《数据结构与算法分析》还有一些图书馆借的一堆C语言经典书籍,环境嘛,就是VS了,实用就好。 做了一周了,
  • C语言文件books.c

    2020-04-13 20:44:42
    由于书较多,摆放杂乱,起来非常麻烦。这学期小明同学上了数据结构与程序设计课后,决定改变这种状况:用C开发一个小型图书管理系统。系统中包含的图书信息有:书名、作者、出版社、出版日期等。首先,图书管理...
  • 你难免会遇到各种各样的问题,有些可能让你百思不得其解,甚至翻遍图书馆,也不到问题的答案。, 本书的出版,填补了这一空白。书中内容是世界各地的C语言用户多年来在新闻组comp.lang.c中讨论的结晶。作者在网络版...
  • 你难免会遇到各种各样的问题,有些可能让你百思不得其解,甚至翻遍图书馆,也不到问题的答案。 本书的出版,填补了这一空白。书中内容是世界各地的C语言用户多年来在新闻组comp.lang.c中讨论的结晶。

空空如也

空空如也

1 2 3 4 5 6
收藏数 119
精华内容 47
关键字:

找图书c语言

c语言 订阅