| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 720 人关注过本帖
标题:标红的一行有错,求改正
只看楼主 加入收藏
armojing
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2012-6-6
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:9 
标红的一行有错,求改正
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
#define N 1000


typedef struct
{
    long int num;                 /*学号*/
    char name[9];                /*姓名*/
    char gender[3];              /*性别*/
    char roomnum[8];             /*宿舍号*/
    char bednum[8];              /*床位号*/
    char age[4];                 /*年龄*/
    char spe[10];                /*专业*/
    char phone[15];              /*电话*/
}DataType;

typedef struct node
{
    DataType data;
    struct node *next;
}ListNode;

typedef ListNode *LinkList;
LinkList head;

int menu()

{
    system("cls");
    int a,i;
    printf("                --------------------------------------------------              ");
    printf("                                西邮宿舍信息管理系统                            ");
    printf("                --------------------------------------------------              ");

    printf("                             1. 录入住宿学生信息                          ");                    
    printf("                             2. 显示住宿学生信息                          ");
    printf("                             3. 查询住宿学生信息                          ");
    printf("                             4. 插入住宿学生信息                          ");
    printf("                             7. paixu住宿学生信息                          ");
    printf("                             5. 删除住宿学生信息                          ");
    printf("                             6.     退出程序                               ");                           
    printf("\n");
    printf("                                                            Armo版权所有                ");
    printf("\t\t\t请选择1-7:");
    for(i=0;i<3;i++)
    {
        scanf("%d",&a);
        if (a<1||a>7)
           printf("\n\t输入错误,请重选1-7\n");
        else
           break;
    }
    return a;
}

LinkList inputList(void)
{
    system("cls");
    ListNode *p,*rear;

    int i,j;
    printf("需要插入数据数量:");
    scanf("%d",&j);
    head = (ListNode *)malloc(sizeof(ListNode));
    rear = head;
    for(i=1;i<=j;i++)
    {   
        printf("请出去第%d位信息:\n",i);
        p=(ListNode *)malloc(sizeof(ListNode));
        printf("学号:");
        scanf("%d",p->data.num);
        printf("姓名:");
        scanf("%s",p->data.name);
        printf("性别:");
        scanf("%s",p->data.gender);
        printf("宿舍号:");
        scanf("%s",p->data.roomnum);
        printf("床位号:");
        scanf("%s",p->data.bednum);
        printf("年龄:");
        scanf("%s",p->data.age);
        printf("专业:");
        scanf("%s",p->data.spe);
        printf("电话:");
        scanf("%s",p->data.phone);
        rear->next = p;
        rear = p;

    }
    rear->next = NULL;
    return head;
}

void showList(LinkList head)
{
    system("cls");
    ListNode *p;
    p=head->next;
    printf("\n学号  姓名  性别  宿舍号  床位号   年龄  专业   电话\n");
    printf("------------------------------------------------------------------\n");
    while(p!=NULL)
    {
     printf("%d      %s      %s      %s      %s      %s      %s      %s\n",p->data.num,p->data.name,p->data.gender,p->data.roomnum,p->data.bednum,p->data.age,p->data.spe,p->data.phone);
     printf("------------------------------------------------------------------\n");
     p=p->next;
    }
    system("pause");

}
void sortList(LinkList head) { // head为链表的头结点
    ListNode *p,*s,*pt;
    p=head->next;
    s=p->next;
    while(p->next != NULL) {
        while(s->next != NULL) {
            if(p->next->data.num > s->next->data.num)
            {
                pt->next = p->next;
                p->next = s->next->next;
                s->next = pt->next;
            }
            s = s->next;
        }
        p = p->next;
        pt = s;
    }
    system("pause");

}



int insertNode(LinkList head,ListNode *p,int i)
{
    system("cls");
    ListNode *p1;
    int j=1;
    p1=head;
    if(p1->next==NULL)
    {
      if(i==0)
      {
        p1->next=p;
        p->next=NULL;
      }
      else
        return 1;
    }
   
    while((j<=i-1)&&(p1!=NULL))
    {
       p1=p1->next;
       j++;
    }
    if(p1==NULL)
       return 1;
   
    p->next=p1->next;
    p1->next=p;

    system("pause");
}

ListNode *findList(LinkList head)
{
    system("cls");
    ListNode *p;
    long int num;
    char name[9];
    int a;
    printf("===========================\n");
    printf("1、按学号查询\n");
    printf("2、按姓名查询\n");
    printf("===========================\n");
    printf("      请选择:               ");
    p=head->next;
    scanf("%d",&a);
    if (a==1)
    {
      printf("学号:");
      scanf("%s",num);
      while((p && strcmp(p->data.num,num)!=0))
          p=p->next;
    }   
    else
      if (a==2)
    {
      printf("姓名:");
      scanf("%s",name);
      while (p && strcmp(p->data.name,name)!=0)
        p=p->next;
    }
    return p;
    system("pause");
}

void deleteNode(LinkList head)
{
    system("cls");
    ListNode *p,*q;
    p=findList(head);
    if(p==NULL)
    {
      printf("没有查到学生信息");
      system("pause");
      return;
    }
    q=head;
    while(q!=NULL && q->next!=p) q=q->next;
    q->next=p->next;
    free(p);
    fflush(stdin);
    printf("该学生信息已删除!\n");
    system("pause");
}
ListNode *deleteList(LinkList head)
{
    system("cls");
    ListNode *p;
    long int num;
    char name[9];
    int a;
    printf("===========================\n");
    printf("1、按学号删除\n");
    printf("2、按姓名删除\n");
    printf("===========================\n");
    printf("      请选择:               ");
    p=head->next;
    scanf("%d",&a);
    if (a==1)
    {
      printf("学号:");
      scanf("%s",num);
      while((p && strcmp(p->data.num,num)!=0))
          p=p->next;
    }   
    else
      if (a==2)
    {
      printf("姓名:");
      scanf("%s",name);
      while (p && strcmp(p->data.name,name)!=0)
        p=p->next;
    }
    return p;
    system("pause");
}


bool campare(char *a,char *b)
{
    int i=0;
    int j=0;
    while(*(a+i)!=NULL)
    {
        i++;
    }
    while(*(b+j)!=NULL)
    {
        j++;
    }
    if(i==j)
    {
        for(int k=0;k<i;k++)
        {
            if(*(a+k)!=*(b+k))
                return false;
        }
        return true;
    }
    return false;
}
void main()

{
    system( "color   3A ");
    char id[20]="0";
    char password[20]="0";
    printf("\n");
    printf("\n");
    printf("\n");
    printf("\t\t ——————————————————\n");
    printf("\t\t|      西邮宿舍管理系统        |\n");
    printf("\t\t ——————————————————\n");
    printf("\t\t\t请输入帐户名:");
    scanf("%s",id);
    while(!campare(id,"armo"))
    {
        printf("\t\t\t您的帐户不对\n\t\t\t请输入帐户:");
        scanf("%s",id);
    }
    printf("\t\t\t请输入密码:");
    scanf("%s",password);
    while(!campare(password,"jing"))
    {
        printf("\t\t\t您的密码不对\n\t\t\t请重新密码:");
        scanf("%s",password);
    }
    printf("\t\t\t系统密码解除,");
    system("pause");   
    ListNode *p;
    int i;
    while(1){
    switch(menu())
    {
        case 1:head = inputList();break;
        case 2:showList(head); break;
        case 3:p=findList(head);
        if(p!=NULL)
        {
            printf("\n学号  姓名  性别  宿舍号  床位号   年龄  专业   电话\n");
            printf("------------------------------------------------------------------\n");
            printf("%s      %s      %s      %s      %s      %s      %s      %s\n",p->data.num,p->data.name,p->data.gender,p->data.roomnum,p->data.bednum,p->data.age,p->data.spe,p->data.phone);
            printf("------------------------------------------------------------------\n");
            system("pause");
        }
        else
        {    printf("没查到要查询的学生信息!");
            system("pause");
        }
        break;
     case 4:p=(ListNode *)malloc(sizeof(ListNode));
            printf("学号:");
            scanf("%d",p->data.num);
            printf("姓名:");
            scanf("%s",p->data.name);
            printf("性别:");
            scanf("%s",p->data.gender);
            printf("宿舍号:");
            scanf("%s",p->data.roomnum);
            printf("床位号:");
            scanf("%s",p->data.bednum);
            printf("年龄:");
            scanf("%s",p->data.age);
            printf("专业:");
            scanf("%s",p->data.spe);
            printf("电话:");
            scanf("%s",p->data.phone);
            printf("请输入要插入的位置:\n");
            fflush(stdin);
            scanf("%d",&i);
            if(insertNode(head,p,i)==1)
            {
                printf("没有合适的插入点!\n");
                system("pause");

             }
             else
             {
                printf("插入完成\n");
             }
             break;
     case 5:deleteNode(head);break;
     case 7:sortList(&head);break;
     case 6:printf("退出程序!\n");getchar();return;
    }
    }

}
搜索更多相关主题的帖子: phone long include 
2012-06-09 01:13
demonleer
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:483
专家分:1225
注 册:2012-6-4
收藏
得分:0 
strcmp是比较字符串的。
2012-06-09 02:28
armojing
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2012-6-6
收藏
得分:0 
回复 2楼 demonleer
你在吗?我把long int 全部改成 char num[8] 之后,那块对了,可是我的第七个,排序函数,貌似没有作用,能帮我看看吗?
2012-06-09 08:34
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:3 
既然数据结构都改变了,你认为你的排序还正确么?
if(p->next->data.num > s->next->data.num) ??

我们都在路上。。。。。
2012-06-09 11:00
demonleer
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:483
专家分:1225
注 册:2012-6-4
收藏
得分:0 
程序代码:

 p=head->next;
    s=p->next;
    while(p->next != NULL) {
        while(s->next != NULL) {
            if(p->next->data.num > s->next->data.num) 
            {
                pt->next = p->next;
                p->next = s->next->next;
                s->next = pt->next;   //你让s->next指向s自己么?
            }
            s = s->next;
        }
        p = p->next;
        pt = s;
    }


这里有几个问题,你的head节点不用参加排序么?
如果链表里就1个节点,则head->next = NULL了,那么p = NULL,那p->next等于什么?
如果链表里就两个节点,则p->next = NULL了,那么s = NULL,那s->next等于什么?
你这里是假设头两个节点不用排序是么?你的意思貌似是所有的节点先跟p->next比较一次,然后p = p->next,但是这个时候你并没有设置s的值,s仍然指向链表的最后。
在链表里交换A、B两个节点要考虑到四个因素:A的前驱和后继,B的前驱和后继。
2012-06-09 11:26
armojing
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2012-6-6
收藏
得分:0 
回复 5楼 demonleer
那应该怎么样写呢,新手啊,,,求指导啊
2012-06-09 11:55
armojing
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2012-6-6
收藏
得分:0 
回复 4楼 hellovfp
版主亲,能不能帮我看看我的排序函数那块,这个实在是不会了
2012-06-09 11:56
love24114
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:223
专家分:399
注 册:2011-7-11
收藏
得分:3 
strcmp是比较字符串的。
2012-06-09 11:58
不依
Rank: 1
等 级:新手上路
帖 子:2
专家分:2
注 册:2012-6-9
收藏
得分:3 
2012-06-09 13:39
demonleer
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:483
专家分:1225
注 册:2012-6-4
收藏
得分:3 
以下是引用armojing在2012-6-9 11:55:43的发言:

那应该怎么样写呢,新手啊,,,求指导啊


你的sortlist函数没有返回linkNode的值,说明你的头结点是空结点,即不用参加排序。

下面是我写的冒泡排序代码。

程序代码:
void sortlist(ListNode *head)
{
    ListNode *p, *s, *t;
    int i, n, j;
    n = 0;
    if ((p=head->next)==NULL||(s=p->next)==NULL)
    {
        return;        // 若没有结点,或者只有一个结点,则返回
    }
    t = head;
    while (t->next!=NULL)
    {
        n++;
        t = t->next;    // 计算结点个数
    }
    for (i=1; i<n; i++)
    {
        p = head->next;
        t = head;
        for (j=0; j<n-i; j++)
        {
            s = p->next;
            if (p->data.sum>s->data.sum)
            {
                t->next = s;
                p->next = s->next;
                s->next = p;
                s = p;            // 交换 p, s 的值
                p = t->next;      // 交换 p, s 的值
            }
            t = p;
            p = s;
        }
    }
}


[ 本帖最后由 demonleer 于 2012-6-9 21:41 编辑 ]
2012-06-09 19:56
快速回复:标红的一行有错,求改正
数据加载中...
 
   



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

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