回 帖 发 新 帖 刷新版面

主题:求高手,成绩管理系统的,输入数据返回主菜单后数据就没了,帮忙修改一下错误(1)

#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"conio.h"
#define HEADER1 " -----------------------------------------------------\n"
#define HEADER2 " |学号|姓名|性别|年龄|语文|数学|英语|电脑|总分|平均分|\n"
#define HEADER3 " |----|----|----|----|----|----|----|----|----|------|\n"
#define FORMAT  " |%-5s|%-5s|%-5s|%-5s|%-5d|%-5d|%-5d|%-5d|%-5d|%-5d|\n"
#define DATA       p->num,p->name,p->sex,p->age,p->Chinese,p->Math,p->English,p->Computer,p->total,p->average
#define END     " -----------------------------------------------------\n"
#define N 100

int saveflag=0;

typedef struct score
{
    char num[15];
    char sex[15];
    char name[15];
    char age[15];        //年龄
    int Chinese;    //语文成绩
    int Math; //数学成绩
    int English;    //英语成绩
    int Computer;   //电脑成绩    
    int total;      //总分
    int average;  //平均分
}SCORE;


void menu()
{
    system("cls");
    printf("                学生成绩管理系统  \n");
    printf("                                     \n");
    printf("*******************主菜单*************************\n");
    printf("*     1 输入信息       2 显示信息             *\n");
    printf("*     3 删除信息       4 查询信息             *\n");
    printf("*     5 修改信息       6 插入信息             *\n");
    printf("*     7 排序信息       8 保存信息             *\n");
    printf("*     9 统计信息       0 退出系统             *\n");
    printf("**************************************************\n");
}
 
void printheader()
{
    printf(HEADER1);
    printf(HEADER2);
    printf(HEADER3);
}

void printdata(SCORE pp)
{   SCORE *p;
    p=&pp;
    printf(FORMAT,DATA);

}


main() 
{   void Save(SCORE temp[],int n);
    void Disp(SCORE temp[],int n);
    void SelectSort(SCORE temp[],int n);
    void Qur(SCORE temp[],int n);
    void Wrong();
    void Nofind();
    int Locate(SCORE temp[],int n,char findmess[],char nameorphonenum[]);
    void stringinput(char *t,int lens,char *notice);
    void stringinput1(int *t,char *notice);
    int Del(SCORE temp[],int n);
    //void SelectSort(SCORE temp[],int n);
    void Modify(SCORE temp[],int n);
    int Add(SCORE temp[], int n);
    int Insert(SCORE temp[],int n);
    void Statistics(SCORE temp[],int n);
    SCORE tele[N];
    FILE *fp;
    int select;
    char ch;
    int count=0;
    fp=fopen("C:\\score.txt","a+");
    if(fp==NULL)
    {   printf("\n====>can not open file!\n");
        exit(0);
    }
    while(!feof(fp))
        if(fread(&tele[count],sizeof(SCORE),1,fp)==1) 
            count++;
    fclose(fp);
    printf("\n==>成功打开文件,总共有  %d  条记录.\n",count);
    getchar();
    menu();
    while(1)
    {   system("cls");
    menu();
    printf("\n             请输入你的选择(0~9):");
    scanf("%d",&select);
    if(select==0)
    {   if(saveflag==1)
        {   getchar();
            printf("\n==>是否要保持已经修改的纪录到文件?(y/n):");
            scanf("%c",&ch);
            if(ch=='y'||ch=='Y')
                Save(tele,count);

        }
    printf("\n===>谢谢你使用本系统!");
    getchar();
    break;
    }
    switch(select)
        {   case 1:count=Add(tele,count);break;
        case 2:system("cls");
           Disp(tele,count);getch();break;
        case 3:count=Del(tele,count);break;
        case 4:Qur(tele,count);getch();break;
        case 5:Modify(tele,count);break;
        case 6:count=Insert(tele,count);break;
       // case 7:SelectSort(tele,count);break;
        case 8:Save(tele,count);break;
        case 9:Statistics(tele,count);break;
        default:Wrong();getchar();break;
        }

    }
}
void Disp(SCORE temp[],int n)
{   int i;
    if(n==0)
        printf("\n====>系统中尚无记录!\n");
    else
    {   printf("\n\n");
    printheader();
    i=0;
    while(i<n)
    {   printdata(temp[i]);
        i++;
        printf(HEADER3);
    }
    }

}


void Wrong()
{   printf("\n\n\n\n\n*********** Error:输入有错!敲任意键继续**********\n");
    getch();
}


void Nofind()
{
    printf("\n====>未找到该信息\n");
}

int Locate(SCORE temp[],int n,char findmess[],char nameornum[])
{   int i=0;
if(strcmp(nameornum,"num)")==0)
    {   while(i<n)
        { if(strcmp(temp[i].num,findmess)==0) return i;
        i++;
        }

    }
    else if(strcmp(nameornum,"name")==0)
    {   while(i<n)
        {   if(strcmp(temp[i].name,findmess)==0) return i;
            i++;
        }
    }
    return -1;
}
void stringinput(char *t,int lens,char *notice)
{   char str[255];
    do
    {   printf(notice);
    scanf("%s",str);
    if(strlen(str)>lens)
        printf("\n 超过规定的长度!\n");
    }while(strlen(str)>lens);
    strcpy(t,str);

void stringinput1(int *t,char *notice)
{   
    
       printf(notice);
    scanf("%d",t);
    
    
   

int Add(SCORE temp[], int n) 
{    char ch,num[10];
    int i,flag=0;
    system("cls");
    Disp(temp,n);
    while (1)
    {    while (1)
        {    stringinput(num,10,"输入编号(按'0'返回主菜单):");
            flag=0;
            if (strcmp(num,"0")==0) return 0;
            i=0;
            while (i<n)
            {    if (strcmp(temp[i].num,num)==0)
                {flag=1;break;}
                i++;
            }
            if (flag==1)
            {    getchar();
                printf("==>编号 %s 已经存在,再试一次?(y/n):",num);
                scanf ("%c",&ch);
                if (ch=='y'||ch=='Y') continue;
                else return n;
            }
            else break;
        }
        strcpy(temp[n].num,num);
        stringinput(temp[n].name,15,"Name:");
        stringinput(temp[n].sex,15,"Sex:");
        stringinput(temp[n].age,15,"Age:");    
        stringinput1(&temp[n].Chinese,"Chinese:");
        stringinput1(&temp[n].Math,"Math:");
        stringinput1(&temp[n].English,"English:");
        stringinput1(&temp[n].Computer,"Computer:");
        saveflag=1;
        n++;
    }
    return(n);
}

    

void Qur(SCORE temp[],int n)
{   int select;
    char searchinput[20];
    int p=0;
    if(n<=0)
    {   system("cls");
        printf("\n=====>成绩单中无记录!\n");
        getchar();
    }
    system("cls");
    printf("\n        =====>1按姓名查找\n");
    printf("\n        =====>2按学号查找\n");
    printf("     请输入选项编号[1,2]:");
    scanf("%d",&select);
    if(select==1)
    {   stringinput(searchinput,10,"请输入一个已经存在的姓名:");
        p=Locate(temp,n,searchinput,"name");
        if(p!=1)
        {   printheader();
            printdata(temp[p]);
            printf(END);
            printf("敲任意键返回......");
            getch();
        }
        else
            Nofind();
        getchar();
    }
    else if(select==2)
    {   stringinput(searchinput,10,"请输入一个已经存在的学号:");
    p=Locate(temp,n,searchinput,"num");
    if(p!=1)
    {   printheader();
        printdata(temp[p]);
        printf(END);
        printf("敲任意键返回......");
        getchar();
    }
    else
        Nofind();
    getchar();
    }
    else
        Wrong();
    getchar();
    
}
int Del(SCORE temp[],int n)
{
    int sel;
    char findmess[20];
    int p=0,i=0;
    if(n<=0)
    {
        system("cls");
        printf("\n=====>电话簿无记录!\n");
        getchar();
        return n;
    }
    system("cls");
    Disp(temp,n);
    printf("\n\t=====>1根据姓名进行删除\n");
    printf("\n\t=====>2根据学号进行删除\n");
    printf("\t请选择[1,2]:");
    scanf("%d",&sel);
    if(sel==1)
    {
        stringinput(findmess,10,"输入一个已有的姓名:");
        p=Locate(temp,n,findmess,"name");
        getchar();
        if(p!=-1)
        {
            for(i=p+1;i<n;i++)
            {
                strcpy(temp[i-1].num,temp[i].num);
                strcpy(temp[i-1].name,temp[i].name);
                strcpy(temp[i-1].sex,temp[i].sex);
                temp[i-1].Chinese=temp[i].Chinese;
                temp[i-1].Math=temp[i].Math;
                temp[i-1].English=temp[i].English;
                temp[i-1].Computer=temp[i].Computer;
                temp[i-1].total=temp[i].total;
                temp[i-1].average=temp[i].average;
            }
            printf("\n\t====>删除成功!\n");
            n--;
            getchar();
            saveflag=1;
            }
        else
            Nofind();
        getchar();
    }
    else if(sel==2)
    {
        stringinput(findmess,15,"请输入一个已经存在的学号:");
        p=Locate(temp,n,findmess,"num");
        getchar();
        if(p!=-1)
        {
            for(i=p+1;i<n;i++)
            {
                strcpy(temp[i-1].num,temp[i].num);
                strcpy(temp[i-1].name,temp[i].name);
                strcpy(temp[i-1].sex,temp[i].sex);
                temp[i-1].Chinese=temp[i].Chinese;
                temp[i-1].Math=temp[i].Math;
                temp[i-1].English=temp[i].English;
                temp[i-1].Computer=temp[i].Computer;
                temp[i-1].total=temp[i].total;
                temp[i-1].average=temp[i].average;
                
            }
            printf("\n\t====>删除成功!\n");
            n--;
            getchar();
            saveflag=1;
        }
        else
            Nofind();
        getchar();
    }
    return n;
}

回复列表 (共1个回复)

沙发

请不要一次性发太多的贴。一个问题之需要一个贴即可。如果内容太多放不下,可以多回几个贴,谢谢。

我来回复

您尚未登录,请登录后再回复。点此登录或注册