首页 > 用户发贴区 > 编程问题提问区 > 找位高手帮我改下代码…
2008
06-12

找位高手帮我改下代码…

#include <stdio.h>
#include <tchar.h>
#include <stdlib.h>

#define Null 0

//存储结构体定义
struct student
{
 int num;
 char name[99];
 int mark;
 struct student *next;
};

//最初显示界面
void print()
{
    printf(“======开始新加入数据请按n========\n”);
    printf(“======要插入学生数据请按i========\n”);
    printf(“======要删除学生数据请按d========\n”);
    printf(“======要查询学生数据请按s========\n”);
    printf(“======退出系统请按x========\n”);
}

//初始化的输入函数
struct student *Init (int n)
{
    int i;
    struct student *head,*p,*s;
    for(i=1;i<=n;i++)
    {
        printf(“学号\t\t姓名\t\t成绩\n”);
        if(i==1)
        {
            p=new struct student;
            scanf(“%d”,&p->num);
            scanf(“%s”,&p->name);
            scanf(“%d”,&p->mark);
            head=p;
        }
        else
        {
            s=new struct student;
            scanf(“%d”,&s->num);
            scanf(“%s”,&s->name);
            scanf(“%d”,&s->mark);
            p->next=s;
            p=s;
        }
    }
    s->next=Null;
    return head;
}

//带位置选择的链表节点插入函数
void Insert(struct student *head)
{
    struct student *p,*pi;
    int xuehao;
    printf(“请问要在哪个学生后面插入数据(输入学号):”);
    scanf(“%d”,&xuehao);
    pi=new struct student;
    p=head;
    printf(“学号\t\t姓名\t\t成绩\n”);
    scanf(“%d”,&pi->num);
    scanf(“%s”,&pi->name);
    scanf(“%d”,&pi->mark);
 
 //检测空节点
    if (head==Null)
    {
        head=pi;
        pi->next=Null;
    }
    else
    {
        while((p->num!=xuehao)&&(p->next!=Null))
        {
            p=p->next;
        }
        if(p->next!=Null)
        {
            pi->next=p->next;
            p->next=pi;
        }
        else
        {
            p->next=pi;
            pi->next=Null;
        }
    }
}

//删除某节点的函数
struct student *Delete(struct student *head,int n)
{
    struct student *p,*q;
    p=head;
    if(head==Null)
    {
        printf(“没有学生的资料要删除!\n”);
        return head;
    }
    while(p->num!=n&&p->next!=Null)
    {
        q=p;
        p=p->next;
    }
    if(p->num==n)
    {
        if(p==head)
        {
            head=p->next;
        }
        else
        {
            q->next=p->next;
            delete p;
        }
    }
    else
    {
        printf(“找不到相应的学生资料!\n”);
        return head;
    }
}

//查找链表中某节点数据的函数
void Serch(struct student *head)
{
    printf(“======按学号查找请按1======\n”);
    printf(“======按姓名查找请按2========\n”);
    printf(“======按成绩查找请按3========\n”);
    char xingming[5];
    int xuehao,chengji,choose;
    struct student *p;
    scanf(“%d”,&choose);
    switch (choose)
    {
        case 1:
        {
            p=head;
            printf(“请输入要查找学生的学号:”);
            scanf(“%d”,&xuehao);
            while(p->num!=xuehao&&p->next!=Null)
            {
                p=p->next;
            }
            if(p->num==xuehao)
            {
                printf(“===学生资料===\n”);
                printf(“学号   姓名   成绩\n”);
                printf(“%d     %s     %d\n”,p->num,p->name,p->mark);
            }
            if(p->num!=xuehao&&p->next==Null)
            {
                printf(“找不到相关学生信息!\n”);
            }
        }break;
        case 2:
        {
            p=head;
            printf(“请输入要查找学生的姓名:”);
            scanf(“%s”,&xingming);
            while(p->name!=xingming&&p->next!=Null)
            {
                p=p->next;
            }
            if(p->name==xingming)
            {
                printf(“===学生资料===\n”);
                printf(“学号   姓名   成绩\n”);
                printf(“%d     %s     %d\n”,p->num,p->name,p->mark);
            }
            if(p->name!=xingming&&p->next==Null)
            {
                printf(“找不到相关学生信息!\n”);
            }
        }break;
        case 3:
        {
            p=head;
            printf(“请输入要查找学生的成绩:”);
            scanf(“%d”,&chengji);
            while(p->mark!=chengji&&p->next!=Null)
            {
                p=p->next;
            }
            if(p->mark==chengji)
            {
                printf(“===学生资料===\n”);
                printf(“学号   姓名   成绩\n”);
                printf(“%d     %s     %d\n”,p->num,p->name,p->mark);
            }
            if(p->mark!=chengji&&p->next==Null)
            {
                printf(“找不到相关学生信息!\n”);
            }
        }break;
        default:break;
    }
}

//退出系统
void Exit()
{
    exit(0);
}

//列出全体数据
void list(struct student *head)
{
    struct student *p;
    p=head;
    printf(“===学生资料===\n”);
    printf(“学号   姓名   成绩\n”);
 
 //以尾节点的Null为输出终止标志
    while(p!=Null)
    {
        printf(“%d\t\t%s\t\t%d\n”,p->num,p->name,p->mark);
        p=p->next;
    }
}

//主函数
int main()
{
    char ch;
    struct student *head;
    print();
    while((ch=getchar())!=’X'||(ch=getchar())!=’x')
    {
        switch (ch)
        {
            case ‘n’:
            {
                int n;
                printf(“请输入打算记录的学生个数:\n”);
                scanf(“%d”,&n);
                head=Init(n);
                list(head);
            }break;
            case ‘i’:
            {
                Insert(head);
                list(head);
            }break;
            case ‘d’:
            {
                int num;
                printf(“请输入要删除学生的学号:”);
                scanf(“%d”,&num);
                head=Delete(head,num);
                list(head);
            }break;
            case ‘s’:
            {
                Serch(head);
            }break;
            case ‘x’:Exit();break;
            default:break;
        }
    }
    return 0;
}
希望能帮我精简点       最好是用for把switch换掉


留下一个回复