程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 鏈表-C語言關於學生管理系統的題,麻煩幫我看看哪裡出錯了,謝謝!

鏈表-C語言關於學生管理系統的題,麻煩幫我看看哪裡出錯了,謝謝!

編輯:編程綜合問答
C語言關於學生管理系統的題,麻煩幫我看看哪裡出錯了,謝謝!

代碼如下:

 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define OK 1
#define ERROR 0
struct Score 
{
    int score;
}s[3];//課程及對應成績

typedef struct LNode
{
    char name[3];
    struct Score s[3];
    struct LNode *next;
}LNode,*LinkList;//鏈表結點

void CreateList(LinkList &L,int n)
{
    int i;
    L=(LinkList)malloc(sizeof(LNode));
    L->next=NULL;
    for(i=n;i>0;i--)
    {
        LinkList p=(LinkList)malloc(sizeof(LNode));
        printf("請輸入該學生的姓名:\n");
        scanf("%s",p->name);
        printf("請依次輸入該學生語文、數學、英語成績:(用逗號分隔數據)\n");
        scanf("%d,%d,%d",&p->s[0].score,&p->s[1].score,&p->s[2].score);//用逗號分隔數據
        p->next=L->next;
        L->next=p;
    }
}//逆位序建立鏈表L

int ListDelete(LinkList &L,int i)
{
    int j=0;
    LinkList p=L;
    LinkList q;
    while(p->next&&j<i-1)
    {
        p=p->next;
        j++;
    }
    if(!p->next||j>i-1)
    {
        return ERROR;
    }
    q=p->next;
    p->next=q->next;
    free(q);
    return OK;
}//刪除第i個學生的信息

int ListInsert(LinkList &L,int i)
{
    int j=0;
    LinkList p=L;
    LinkList a;
    while(p&&j<i-1)
    {
        p=p->next;
        j++;
    }
    if(!p||j>i-1)
    {
        return ERROR;
    }
    a=(LinkList)malloc(sizeof(LNode));
    printf("須增加的學生姓名:");
    scanf("%s",a->name);
    printf("依次輸入該生語文、數學、英語的成績:(用逗號分隔數據)");
    scanf("%d,%d,%d",&a->s[0].score,&a->s[1].score,&a->s[2].score);//逗號分隔數據
    a->next=p->next;
    p->next=a;
    return OK;
}//在第i位插入一名學生的信息

int ModifyList(LinkList &L,int Chinese,int Math,int English)
{
    LinkList p=L->next;
    char changename[3];
    printf("請輸入需要修改的學生的姓名:");
    scanf("%s",changename);
    for(;(strcmp(changename,p->name)==0);p=p->next)
    {
        p->s[0].score=Chinese;
        p->s[1].score=Math;
        p->s[2].score=English;
    }
    return OK;
}//修改某生成績

int ShowList(LinkList &L)
{
    LinkList p=L->next;
    while(p!=NULL)
    {
        printf("%s的語文成績為:%d數學成績為:%d英語成績為:%d\n",p->name,p->s[0].score,p->s[1].score,p->s[2].score);
        p=p->next;
    }
    return OK;
}//輸出鏈表

void main()
{
    LinkList L;
    int Chinese=99,Math=85,English=70;//修改的學生的成績
    CreateList(L,3);
    ShowList(L);
    ListInsert(L,2);
    ShowList(L);
    ListDelete(L,2);
    printf("刪除後的學生信息:\n");
    ShowList(L);
    ModifyList(L,Chinese,Math,English);
    ShowList(L);
}



前面運行出來都是對的,就只有最後修改的那個函數有問題,麻煩幫忙看一下,謝謝!

最佳回答:


int ModifyList(LinkList &L,int Chinese,int Math,int English)
{
LinkList p=L->next;
char changename[3];
printf("請輸入需要修改的學生的姓名:");
scanf("%s",changename);
for(; p ! = NULL ; p=p->next)
{
//strcmp返回0代表兩個字符串相同
if(strcmp(changename,p->name)==0)
{
p->s[0].score=Chinese;
p->s[1].score=Math;
p->s[2].score=English;
return OK;
}
}
return ERROR;
}//修改某生成績

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved