| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 670 人关注过本帖
标题:做了一个图书管理系统,出现了点问题
只看楼主 加入收藏
hzh612
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2014-7-17
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
做了一个图书管理系统,出现了点问题
做了一个图书管理系统,仅有管理员的时候,所有的都能正常运行。但是加上学生这个用户之后,程序就出了些问题。比如说选管理员,出来管理员的界面,进行操作,选择完一个操作按回车再选第二个,就不能正常运行,就是结束了,而且不能回到主菜单。求大神帮忙解答,明天就要答辩了~~紧急求助啊
代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct book
{
    int num,count;
    double price;
    char name[10];
    char house[20];   
    struct book *next;
};
#define LEN sizeof(struct book)
int mulu(void)//系统目录的函数
{
        printf("\t\t\t====欢迎进入图书管理系统====\n");
        printf("\t\t\t   |    管理员-----1  |\n");
        printf("\t\t\t   |    学生-------2  |\n");
        printf("\t\t\t   |    退出系统-----0  |\n");
        printf("\t\t\t============================\n");
}
void ManagerLogin()
{
        printf("\n");
        printf("            管理员,您好!\n");
        printf("------------------------------------\n");
        printf("  1.图书信息初始化\n");
        printf("  2.保存图书信息\n");
        printf("  3.显示图书信息\n");
        printf("  4.打开图书信息\n");
        printf("  5.添加图书信息\n");
        printf("  6.删除图书信息\n");
        printf("  7.修改图书信息\n");
        printf("==============================\n");
}
void StudentLogin()
{

                printf("\n");
                printf("       同学,你好!\n");
                printf("-----------------------\n");
                printf("   1.图书信息查询\n");
                printf("   0.返回主菜单\n");
}
struct book *creat(void)
{
    struct book *p1,*p2,*head=NULL;
    p1=p2=(struct book *)malloc(LEN);
    printf("输入图书编号:");
    scanf("%d",&p1->num);
    getchar();
    printf("输入图书书名:");
    gets(p1->name);
    printf("输入图书出版社:");
    gets(p1->house);
    printf("输入图书库存量:");
    scanf("%d",&p1->count);
    printf("输入图书单价:");
    scanf("%lf",&p1->price);
    getchar();
    while(p1->num!=0)
    {
        if(head==NULL)
        {
            head=p1;
        }
        else
        {
            p2->next=p1;
        }
        p2=p1;
        p1=(struct book *)malloc(LEN);
        printf("输入图书编号:");
        scanf("%d",&p1->num);
        getchar();
        printf("输入图书书名:");
        gets(p1->name);
        printf("输入图书出版社:");
        gets(p1->house);
        printf("输入图书库存量:");
        scanf("%d",&p1->count);
        printf("输入图书单价:");
        scanf("%lf",&p1->price);
        getchar();
    }
    p2->next=NULL;
    free(p1);
    return head;
}
void baocun(struct book *head)//保存链表为磁盘文件
{
    FILE *fp;
    struct book *p;
    char filename[20];

    printf("请输入要保存的文件名:");
    scanf("%s",&filename);
    if((fp=fopen(filename,"w"))==NULL)
    {
        printf("Can't open this file!\n");
        return;//exit(0);正常退出,执行后显示press anykey to continue;
    }// getchar();
    p=head;
    while(p!=NULL)
    {
        fprintf(fp,"%d\n",p->num);
        fprintf(fp,"%s\n",p->name);
        fprintf(fp,"%s\n",p->house);
        fprintf(fp,"%d\n",p->count);
        fprintf(fp,"%lf\n",p->price);
        p=p->next;
    }
    fputs("0",fp);
    printf("文件保存成功!\n");//
    getchar();
    fclose(fp);
}
void list(struct book *head)
{    struct book *p;
     if (head==NULL)
         printf("图书信息为空!\n");
     else
     {
         printf("\n全部图书的简要信息: \n");
         printf("\n编号      书名      出版社     库存数量    价格\n");
         p=head;
         while (p!=NULL)
            {   
             printf("%d, %s, %s, %d, %f",p->num,p->name,p->house,p->count,p->price);
             printf("\n");
             p=p->next;
            }
     }
     getchar();
}
struct book *openfile(void)//打开文件,即新创建链表读取磁盘文件
{
    struct book *head,*p1,*p2;
    FILE *fp;
    char filename[20];

    printf("请输入要打开的文件名:");//若文件保存在默认路径,读取时无需输入路径
    scanf("%s",filename);
    if((fp=fopen(filename,"r"))==NULL)
    {
        printf("Can't open this file!\n");
        exit(0);
    }
    head=p1=p2=(struct book *)malloc(LEN);
    fscanf(fp,"%d%s%s%d%lf",&p1->num,p1->name,p1->house,&p1->count,&p1->price);
    while(!feof(fp))
    {
        p1=(struct book *)malloc(LEN);
        p2->next=p1;//节点连接
        fscanf(fp,"%d%s%s%d%lf",&p1->num,p1->name,p1->house,&p1->count,&p1->price);
        if(p1->num==0)
        {
            p2->next=NULL;
            printf("文件打开成功,可显示信息!\n");
            getchar();
            return head;
        }
        p2=p1;
    }
    fclose(fp);
    p2->next=NULL;
    return head;
}
struct book *insert(struct book *head,int num)
{
    struct book *p1,*p0,*p2;
    p0=(struct book *)malloc(LEN);
    p0->next=NULL;
    printf("\n输入编号      书名      出版社     库存数量    价格\n");
    scanf("%d%s%s%d%lf",&p0->num,&p0->name,&p0->house,&p0->count,&p0->price);
    getchar();
    if(head==NULL)
        head=p0;
    else
    {
        p1=head;
        while((p0->num>p1->num)&&(p1->next!=NULL))
        {
            p2=p1;
            p1=p1->next;
        }
        if(p0->num<=p1->num)
        {
            if(head==p1)
                head=p0;
            else
                p2->next=p0;
            p0->next=p1;
        }
        else
            p1->next=p0;
    }
    return (head);   
}
struct book *del(struct book *head,int num)
{
    struct book *p1,*p2=NULL;

    printf("请输入要删除的图书的编号: ");
    scanf("%d",&num);
    if(head == NULL)
        printf("图书信息为空,无法执行操作!\n");
    else
    {
        p1 = head;
        while((num!=p1->num) && (p1->next!=NULL))
        {
            p2 = p1;
            p1 = p1->next;
        }
        if(num==p1->num)
        {
            if(p1==head)
                head = p1->next;
            else
                p2->next = p1->next;
            free(p1);
            printf("该图书信息已删除!\n");
        }
        else
            printf("无该图书信息,无法删除!\n");
        }
    return head;
}
struct book *serch(struct book *head)//查询
{
    struct book *p1;
    int select,num;
    char name[100];

    if(head==NULL)
    {
        printf("图书信息为空!\n");
    }
    else
    {
        p1=head;
        printf("****************************\n");
        printf("1.按图书的编号进行查询    \n");
        printf("2.按图书的书名进行查询 \n");
        printf("\n请选择你需要的服务(1-2): \n");
        printf("请选择查询类别: \n");
        scanf("%d",&select);
        switch(select)
        {
            case 1:printf("输入想查询的图书编号:\n");
                   scanf("%d",&num);
                   while((num!=p1->num)&&(p1->next!=NULL))
                   {
                      p1=p1->next;
                   }
                   if(num==p1->num)
                   {
                       printf("图书编号:%3d图书书名:%3s图书出版社:%3f图书库存量:%3d图书价格%3f\n",p1->num,p1->name,p1->house,p1->count,p1->price);
                        
                   }
                   else
                   {
                       printf("不存在该图书!\n");
                   }
                   break;
            case 2:printf("输入想查询的图书书名:\n");
                   scanf("%s",name);
                   while((strcmp(p1->name,name)!=0)&&(p1->next!=NULL))
                   {
                       p1=p1->next;
                   }
                   if(strcmp(name,p1->name)==0)
                   {
                      printf("图书编号:%3d图书书名:%3s图书出版社:%3f图书库存量:%3d图书价格%3f\n",p1->num,p1->name,p1->house,p1->count,p1->price);
                   }
                   else
                       printf("没有该图书!\n");
                   break;
         default:printf("\n按键错误,请重新选择!\n");
        }
    }
    getchar();
    return (head);
}
struct book *gai(struct book *head)//修改记录
{
    struct book *p;
    int num;
    if(head==NULL)
    {  
        printf("未能打开任何文件!\n");
        getchar();
        return NULL;
    }
    p=head;
    printf("请输入要修改的图书的编号:");
    scanf("%d",&num);
    while(p!=NULL)
    {
        if(p->num==num)
        {
            printf("编号: %d 书名: %s 出版社: %s 库存量: %d 价格: %lf\n",p->num,p->name,p->house,p->count,p->price);
            printf("请按提示输入修改后的数据\n");
            printf("编号  书名  出版社  库存量  价格: \n");
            scanf("%d%s%s%d%lf",&p->num,p->name,p->house,&p->count,&p->price);
            printf("修改成功!\n");
            getchar();
            return head;
        }
        p=p->next;
    }
    printf("未能找到记录!\n");
    return head;
}
int main(void)
{
    int i,j=0,num=0;
    struct book *head=NULL;
    char ch;

    mulu();
    printf("\t\t\t*请按照提示选择用户*\n\t\t\t");
    scanf("%d",&i);
    if(i<0 || i>2)
    {
        printf("\t\t\tput error!\n");
        exit(0);
    }
    else if(i==1)
    {
        system("cls");
        do
        {
            ManagerLogin();
            printf("请选择相应的操作:");
            getchar();
            scanf("%c",&ch);
            switch(ch)
            {
                case '1':head=creat();break;
                case '2':baocun(head);break;
                case '3':list(head);break;
                case '4':head=openfile();break;
                case '5':head=insert(head,num);break;
                case '6':head=del(head,num);break;
                case '7':head=gai(head);break;
                default: exit(0);
            }
            printf("按回车键返回\n");
            getchar();
            system("cls");
            j=1;
        }while(j);
    }
        else if(i==2)
    {
        system("cls");
        do
        {
            StudentLogin();
            printf("请选择相应的操作:");
            getchar();
            scanf("%c",&ch);
            switch(ch)
            {
                case '1':head=serch(head);break;
                case '0':break;
                default: exit(0);
            }
            printf("按回车键返回\n");
            getchar();
            system("cls");
            j=1;
        }while(j);
    }
    else
        exit(0);
    return 0;
}
搜索更多相关主题的帖子: 管理系统 include double 管理员 house 管理系统 include double 管理员 house 
2014-07-17 15:08
hzh612
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2014-7-17
收藏
得分:0 
求大神指点啊~~
2014-07-17 15:25
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:10 
你在页面下方的搜索里找一下,那一堆堆一片片一坨坨的图书管理系统不计其数呀……

梦想拥有一台龙芯3A-4000
2014-07-17 15:34
hzh612
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2014-7-17
收藏
得分:0 
回复 3 楼 ditg
但是没有多用户的那种啊,我的单用户的可以正常运行。
2014-07-17 15:37
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:0 
那你就搜索其它系统呗,前段时间好像有个银行系统的也是多用户

梦想拥有一台龙芯3A-4000
2014-07-17 15:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
又过答辩时间啦

授人以渔,不授人以鱼。
2014-07-18 09:57
快速回复:做了一个图书管理系统,出现了点问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030782 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved