| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 590 人关注过本帖
标题:程序出现了令我头疼的错误!请求哪位大侠帮我改改看,谢了!
只看楼主 加入收藏
jj369258
Rank: 4
等 级:业余侠客
帖 子:116
专家分:226
注 册:2010-12-2
结帖率:69.57%
收藏
已结贴  问题点数:5 回复次数:7 
程序出现了令我头疼的错误!请求哪位大侠帮我改改看,谢了!
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct user
{
    char ID[20];/*用户名,身份证号码*/
    char Password[10];/*密码*/
    char Rank[20];/*用户等级*/
    struct user *next;
}USE;
void displayMenu();/*显示菜单*/
int choiceItem();/*选择菜单项*/
void freeUser(USE *head);
USE *createUser(USE *head);/*创建用户菜单*/
USE *AddUserSysterm(USE *head);/*新增用户*/
USE *DelUserSysterm(USE *head);/*删减用户*/
void LogSystem();/*登陆系统*/
void RechargeSystem();/*充值系统*/
void DownSystem();/*下机系统*/
void DisPlayall(USE *head);/*显示所有用户*/
void main()
{
    USE *head=NULL;
    int choice;
    do
    {
        choice=choiceItem();
        switch(choice)
        {
        case 1:head=createUser(head);//创建用户
            break;
        case 2: head=AddUserSysterm(head);//新增会员
            break;
        case 3: head=DelUserSysterm(head);//删减会员
            break;
        case 4: LogSystem();//登陆系统
            break;
        case 5: RechargeSystem();//充值系统
            break;
        case 6: DownSystem();//下机系统
            break;
        case 7: DisPlayall(head);//显示所有用户
            break;
        }
    }while(choice!=0);
    printf("\n\nThank you!!!");
    freeUser(head);
}
void displayMenu(void)
{
    printf("\n         ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆");
    printf("\n          ***欢迎进入网吧用户管理系统***");
    printf("\n         ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆");
    printf("\n          1-->创建用户\n");
    printf("\n          2-->新增会员\n");
    printf("\n          3-->删减会员\n");
    printf("\n          4-->登陆系统\n");
    printf("\n          5-->充值系统\n");
    printf("\n          6-->下机系统\n");
    printf("\n          7-->显示所有用户\n");
    printf("\n          0-->退出\n");
    printf("\n          请选择:");
}
int choiceItem(void)
{
    int choice;
    do{
        displayMenu();
        scanf("%d",&choice);
    }while(choice<0||choice>7);
    return choice;
}
void freeUser(USE *p)/*释放链表结点*/
{
    USE *q;
    while(P!=NULL)
    {
        q=p;
        p=p->next;
        free(q);//一次释放各个结点
    }
}
USE *AddUserSysterm(USE *P)//输入一个新的记录,添加到链表中
{
    USE head,*q;
    head.next=p;
    p=&head;
    while(p->next!=NULL)
        p=p->next;//将当前指针移动到链表尾端
    while(1){
        char txet[80];
        q=(USE*)malloc(sizeof(USE));
        if(q==NULL)
            return head.next;
        q->next=NULL;
        printf("\n\n请输入新的身份证号码和用户等级\n");
        gets(text);
        if(text[0]=='\0')
            break;
        sscanf(text,"%s%s",q->ID,q->Rank);//分解用户身份证、等级
        p->next=q;
        p=q;
    }
    return head.next;
}
USE *createUser(USE *p)//创建新用户
{
    freeUser(p);//释放原链表所占空间
    return Adduser(NULL);//输入一组新纪录,创建链表
}
USE *DelUserSysterm(USE *P)
{
    char ID[20];
    USE *q,head;//前驱结点
    printf("\n请输入身份证号码:");
    gets(ID);//输入要删除的用户的身份证号码
    for(head.next=p,q=&head;p!=NULL;P=P->next)
    {
        if(strcmp(p->ID,ID)!=0)//不等于当前结点的身份证号码
            q=p;//以当前结点作为前驱结点
        else{
            q->next=p_next;//从链表中移出当前结点
            free(p);//释放当前结点
            printf("\n用户%s已被删除\n",ID);
            return head.next;
        }
    }
    printf("\n没有用户%s\n",ID);
    return head.next;
}
void DisPlayall(USE *p);/*显示所有用户*/
{
    printf("\n用户名号\t等级等级\n");
    for( ;p!=NULL;p=p->next)
    {
        printf("%s\t%s\n",p->ID,p->Rank);
        printf("\n");
    }

}
void LogSystem()
{
    char ID[20],Password[10];
    char ch;
    int t=1;
    printf("   ***欢迎进入登陆系统***   \n");
    printf("请输入身份证号码:\n");
    gets(ID);
    printf("请输入密码:初始密码为12345\n");
    gets(Password);
    printf("确认登陆(y/n)\n");
    ch=getchar();
    if(ch=='y')
    {
        if(strcmp((Password),("12345"))==0)
        {
            printf("登入成功!\n");
        }
        while(strcmp((Password),("12345"))!=0)
        {
            printf("密码错误,登陆失败!\n");
            printf("请重新输入密码:\n");
            if(t==1)
            {
                getchar();
            }
            gets(Password);        
            if(strcmp((Password),("12345"))==0)
            {
                printf("登入成功!\n");
                break;
            }
}
void RechargeSystem()
{
    char ID[20];
    char ch;
    char Money[10];//充值的金额
    printf("   ***欢迎进入充值系统***   \n");
    do{
        printf("请输入身份证号码:\n");
        getchar();
        gets(ID);
        printf("请输入充值金额:\n");
        gets(Money);
        printf("你充值的金额为%s元\n",Money);
        printf("是否继续?(y/n)\n");
        ch=getchar();
        if(ch=='y')
        {
            printf("恭喜你!充值成功!\n");
            break;
        }
        else if(ch=='n')
        {
            printf("对不起!你未充值!\n");
            break;
        }
        else
            printf("操作失败!是否继续?(y/n)\n");
        getchar();
    }while((getchar())!='n');*/
}
void DownSystem()
{
    char ch;
    printf("是否确认下机?(y/n)");
    ch=getchar();
    if(ch=='y')
        printf("下机成功!谢谢你的使用!");
    else
        printf("你未下机!");
}
    这是我随便写的一个网吧用户管理系统,将其模块化,设定了一系列函数,但是其中有几个错误,真的不知道怎么改!求助!!!1
        





































搜索更多相关主题的帖子: 身份证号码 用户名 密码 
2011-06-18 21:46
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:2 
程序代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

typedef struct user
{
    char ID[20];/*用户名,身份证号码*/
    char Password[10];/*密码*/
    char Rank[20];/*用户等级*/
    struct user *next;
}USE;

void displayMenu(void)
{
    printf("\n         ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆");
    printf("\n          ***欢迎进入网吧用户管理系统***");
    printf("\n         ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆");
    printf("\n          1-->创建用户\n");
    printf("\n          2-->新增会员\n");
    printf("\n          3-->删减会员\n");
    printf("\n          4-->登陆系统\n");
    printf("\n          5-->充值系统\n");
    printf("\n          6-->下机系统\n");
    printf("\n          7-->显示所有用户\n");
    printf("\n          0-->退出\n");
    printf("\n          请选择:");
}
void RechargeSystem()
{
    char ID[20];
    char ch;
    char Money[10];//充值的金额
    printf("   ***欢迎进入充值系统***   \n");
    do{
        printf("请输入身份证号码:\n");
        getchar();
        gets(ID);
        printf("请输入充值金额:\n");
        gets(Money);
        printf("你充值的金额为%s元\n",Money);
        printf("是否继续?(y/n)\n");
        ch=getchar();
        if(ch=='y')
        {
            printf("恭喜你!充值成功!\n");
            break;
        }
        else if(ch=='n')
        {
            printf("对不起!你未充值!\n");
            break;
        }
        else
            printf("操作失败!是否继续?(y/n)\n");
        getchar();
    }while((getchar())!='n');
}

int choiceItem(void)
{
    int choice;
    do
    {
        displayMenu();
        scanf("%d",&choice);
    }while(choice<0||choice>7);
    return choice;
}
void freeUser(USE *p)/*释放链表结点*/
{
    USE *q;
    while(p!=NULL)
    {
        q=p;
        p=p->next;
        free(q);//一次释放各个结点
    }
}

USE *AddUserSysterm(USE *p)//输入一个新的记录,添加到链表中
{
    USE head,*q;
    head.next=p;
    p=&head;
    while(p->next!=NULL)
        p=p->next;//将当前指针移动到链表尾端
    while(1){
        char text[80];
        q=(USE*)malloc(sizeof(USE));
        if(q==NULL)
            return head.next;
        q->next=NULL;
        printf("\n\n请输入新的身份证号码和用户等级\n");
        gets(text);
        if(text[0]=='\0')
            break;
        sscanf(text,"%s%s",q->ID,q->Rank);//分解用户身份证、等级
        p->next=q;
        p=q;
    }
    return head.next;
}
USE *createUser(USE *p)//创建新用户
{
    freeUser(p);//释放原链表所占空间
    return AddUserSysterm(NULL);//输入一组新纪录,创建链表
}
USE *DelUserSysterm(USE *p)
{
    char ID[20];
    USE *q,head;//前驱结点
    printf("\n请输入身份证号码:");
    gets(ID);//输入要删除的用户的身份证号码
    for(head.next=p,q=&head;p!=NULL;p=p->next)
    {
        if(strcmp(p->ID,ID)!=0)//不等于当前结点的身份证号码
            q=p;//以当前结点作为前驱结点
        else{
            q->next=p->next;//从链表中移出当前结点
            free(p);//释放当前结点
            printf("\n用户%s已被删除\n",ID);
            return head.next;
        }
    }
    printf("\n没有用户%s\n",ID);
    return head.next;
}
void DisPlayall(USE *p)/*显示所有用户*/
{
    printf("\n用户名号\t等级等级\n");
    for( ;p!=NULL;p=p->next)
    {
        printf("%s\t%s\n",p->ID,p->Rank);
        printf("\n");
    }

}
void LogSystem()
{
    char ID[20],Password[10];
    char ch;
    int t=1;
    printf("   ***欢迎进入登陆系统***   \n");
    printf("请输入身份证号码:\n");
    gets(ID);
    printf("请输入密码:初始密码为12345\n");
    gets(Password);
    printf("确认登陆(y/n)\n");
    ch=getchar();
    if(ch=='y')
    {
        if(strcmp((Password),("12345"))==0)
        {
            printf("登入成功!\n");
        }
        while(strcmp((Password),("12345"))!=0)
        {
            printf("密码错误,登陆失败!\n");
            printf("请重新输入密码:\n");
            if(t==1)
            {
                getchar();
            }
            gets(Password);       
            if(strcmp((Password),("12345"))==0)
            {
                printf("登入成功!\n");
                break;
            }
        }
    }

}


void DownSystem()
{
    char ch;
    printf("是否确认下机?(y/n)");
    ch=getchar();
    if(ch=='y')
        printf("下机成功!谢谢你的使用!");
    else
        printf("你未下机!");
}

void main()
{
    USE *head=NULL;
    int choice;
    do
    {
        choice=choiceItem();
        switch(choice)
        {
        case 1:
            head=createUser(head);//创建用户
            break;
        case 2:
            head=AddUserSysterm(head);//新增会员
            break;
        case 3:
            head=DelUserSysterm(head);//删减会员
            break;
        case 4:
            LogSystem();//登陆系统
            break;
        case 5:
            RechargeSystem();//充值系统
            break;
        case 6:
            DownSystem();//下机系统
            break;
        case 7:
            DisPlayall(head);//显示所有用户
            break;
        }
    }while(choice!=0);
    printf("\n\nThank you!!!");
    freeUser(head);
}
没错了  但是逻辑错误你自己来吧

                                         
===========深入<----------------->浅出============
2011-06-18 22:07
jj369258
Rank: 4
等 级:业余侠客
帖 子:116
专家分:226
注 册:2010-12-2
收藏
得分:0 
回复 2楼 laoyang103
谢谢!!我在看看哦!!这问题困扰了我几天了!!
2011-06-18 22:27
自由战士89
Rank: 5Rank: 5
等 级:职业侠客
帖 子:154
专家分:387
注 册:2010-9-2
收藏
得分:2 
既然你都模块化了,那麽问题就容易解决了,分开测试。
2011-06-18 23:53
jj369258
Rank: 4
等 级:业余侠客
帖 子:116
专家分:226
注 册:2010-12-2
收藏
得分:0 
回复 2楼 laoyang103
你好!首先谢谢你帮我进行了改进,但是,我如果想进一步完善该功能,比如:第一次新增用户之后,如果在登录系统里面输入身份证号码不是已经新建的,那么也就是无效的身份证号码,那么就输出“对不起,该用户不存在!!”,再返回原来的操作,这一操作如何样进行??是否可以在前面新建的用户都用flag=1代表,然后再登录系统里判断一下输入的身份证号码是否满足flag=1;如果不满足,则printf("对不起,该用户不存在!!")。
2011-06-19 07:48
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
回复 5楼 jj369258
你还是自己调试着来吧

                                         
===========深入<----------------->浅出============
2011-06-19 08:54
bccn_2012
Rank: 6Rank: 6
等 级:侠之大者
帖 子:158
专家分:447
注 册:2011-5-14
收藏
得分:2 
自己动手,丰衣足食
2011-06-19 11:31
jj369258
Rank: 4
等 级:业余侠客
帖 子:116
专家分:226
注 册:2010-12-2
收藏
得分:0 
回复 7楼 bccn_2012
我真的没有办法了,自己走路也要高手指路啊!!!
2011-06-19 18:22
快速回复:程序出现了令我头疼的错误!请求哪位大侠帮我改改看,谢了!
数据加载中...
 
   



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

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