Ура! 2021-12-30 19:48 采纳率: 100%
浏览 57
已结题

请问为什么我的代码无警告错误,却运行不出结果


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define HEADER1 "|-----------------------------------------------------------------------------------学生信息管理系统--------------------------------------------------------------------------------------|\n"
#define HEADER2 "|     学号     |   姓名   | 年龄 | 性别 |   出生年月   |                           地址                           |      电话       |      email      | 高数成绩 | 大学英语成 | c语言成绩 |\n"   
#define HEADER3 "|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n"
#define FORMAT  "|%-13s |%-8s  |%-4s  |%-4s  |%-10s    |%-38s                    |%-13s    |%-16s |%-8s  |%-6s      |%-6s     |\n"
#define DATA     p->number,p->name,p->age,p->sex,p->birth,p->address,p->phone,p->email,p->math,p->english,p->c
#define END     "|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n" 
#define MAX_NUM 50
#define SUCCESS 0
int saveflag=0;
void Refresh()
{
    system("cls");
}
typedef struct student
{
    char number[20];
    char name[20];
    char age[10];
    char sex[10];
    char birth[15];
    char address[50];
    char phone[20];
    char email[20];
    char math[10];
    char english[10];
    char c[10];
}stu;
int Filehandle(struct student * s[],int * pn)
{
    FILE * fp;
    int num=0;
    struct student * p;
    fp=fopen("C:\\Users\\lenovo\\Desktop\\高级语言程序设计实践课\\st","ab+");
    if(fp==NULL)
    {
        printf("\n=====>Can not open file!\n");
        exit(0);
    }
    while(!feof(fp)&&num<MAX_NUM)
    {
        p=(struct student *)malloc(sizeof(struct student));
        if(!p)
        {
            printf(" Memory malloc faileure! \n");
            exit(0);
        }
        if(fread(p,sizeof(struct student),1,fp)==1)
        {
            s[num]=p;
            num++;
        }
    }
    *pn=num;
    fclose(fp);
    printf("\n=====>Open file success,the total number of records is:%d.\n",num);
    return SUCCESS;
}
void printheader()
{
    printf(HEADER1);
    printf(HEADER2);
    printf(HEADER3);
}
void printdata(struct student * p)
{
    printf(FORMAT,DATA);
}
void Nofind()
{
    printf("\n=====>没有找到该学生!\n");
}
void Disp(struct student * s[],int num)
{
    int i;
    struct student * p;
    if(num==0)
    {
        printf("\n=====>没有学生信息!\n");
        system("pause");
        return;
    }
    printf("\n\n");
    printheader();
    for(i=0;i<num;i++)
    {
        p=s[i];
        printdata(p);
        printf(HEADER3);
    }

}
int Locate(struct student * s[],int num,char findmess[],char nm[])
{
    struct student * r;
    int i=0;
    if(strcmp(nm,"name")==0)
    {
        while(i<num)
        {
            r=s[i];
            if(strcmp(r->name,findmess)==0)
                return i;
            i++;
        }
    }
    else if(strcmp(nm,"number")==0)
    {
        while(i<num)
        {
            r=s[i];
            if(strcmp(r->number,findmess)==0)
                return i;
            i++;
        }
    }
    exit(0);
}
void stringinput(char * t,int lens,char * notice)
{
    char n[255];
    do
    {
        printf(notice);
        scanf("%s",n);
        if(strlen(n)>(unsigned)lens)printf("\n exceed the requirednlength! \n");
    }
    while(strlen(n)>(unsigned)lens);
    strcpy(t,n);
}
void Add(struct student * s[],int * pn)
{
    struct student * p;
    char ch,number[20];
    int num=* pn;
    system("cls");
    Disp(s, * pn);
    while(1)
    {
        stringinput(number,20,"输入学号(输入0来返回菜单):");
        if(strcmp(number,"0")==0)
            return;
        if(num>=MAX_NUM)
        {
            printf("学生数量已达最大%d!!!",MAX_NUM);
            return;
        }
        p=(struct student *)malloc(sizeof(struct student));
        if(!p)
        {
            printf("\n 申请内存空间失败!\n");
            return;
        }
        strcpy(p->number,number);
        stringinput(p->name,20,"姓名:");
        stringinput(p->age,10,"年龄:");
        stringinput(p->sex,10,"性别:");
        stringinput(p->birth,15,"出生年月:");
        stringinput(p->address,50,"地址:");
        stringinput(p->phone,20,"电话:");
        stringinput(p->email,20,"Email:");
        stringinput(p->math,10,"高数成绩:");
        stringinput(p->english,10,"大学英语成绩:");
        stringinput(p->c,10,"C语言成绩:");
        getchar();
        printf("=====>是否保存本条记录?(y/n):");
        scanf("%c",&ch);
        if(ch=='y'||ch=='Y')
            saveflag=1;
        else
            saveflag=0;
        if(saveflag==1)
        {
            s[num]=p;
            num++;
            (*pn)++;
        }
        else
        {
            free(p);
        }
    }
    return;
}
void Find(struct student * s[],int num)
{
    int select;
    int i;
    char searchinput[20];
    struct student * p;
    if(num==0)
    {
        system("cls");
        printf("\n=====>没有数据!\n");
        system("pause");
        getchar();
        return;
    }
    while(1)
    {
    system("cls");
    printf("                                                                                    |----------------------|\n");
    printf("                                                                                    |-----1.按学号查询-----|\n");
    printf("                                                                                    |-----2.按姓名查询-----|\n");
    printf("                                                                                    |-----3.退出本菜单-----|\n");
    printf("                                                                                    |----------------------|\n");
    printf("                                                                                         请输入操作编号:");  
    scanf("%d",&select);
    if(select==1)
    {
        stringinput(searchinput,20,"请输入学号:");
        i=Locate(s,num,searchinput,"number");
        if(i>=0)
        {
            printheader();
            for(i=0;i<num;i++)
            {
                p=s[i];
                if(strcmp(p->number,searchinput)==0)
                {
                    printdata(p);
                }
            }
            printf(END);
            printf("返回");
        }
        else
            Nofind();
        getchar();
    }
    else if(select==2)
    {
        stringinput(searchinput,20,"请输入姓名:");
        i=Locate(s,num,searchinput,"name");
        if(i>=0)
        {
            printheader();
            for(i=0;i<num;i++)
            {
                p=s[i];
                if(strcmp(p->name,searchinput)==0);
                {
                    printdata(p);
                }
            }
            printf(END);
            printf("返回");
        }
        else
            Nofind();
        getchar();
    }
    else if(select==3)
    {
        return;
    }
    else    
        printf("输入有误,请输入正确的操作编号(1~3)\n");
        system("pause"); 
    }
}
void Delt(struct student * s[],int * pn)
{
    int i,j;
    struct student * p;
    char findmess[20];
    if(*pn==0)
    {
        system("cls");
        printf("\n=====>没有数据!\n");
        getchar();
        return;
    }
    while(1)
    {
    system("cls");
    Disp(s, *pn);  
    printf("                                                                           |----------------------------|\n");
    printf("                                                                           |-----1.删除所有学生信息-----|\n");
    printf("                                                                           |-----2.查找学号删除信息-----|\n");
    printf("                                                                           |-----3.退出本菜单-----------|\n");
    printf("                                                                           |----------------------------|\n");
    printf("                                                                                  请输入操作编号:");
    scanf("%d",&j);
    if(j==1)
    {
        for(i=0;i<*pn;i++)
        {
            p=s[i];
            if(p)
                free(p);
        }
        *pn=0;
        printf("\n=====>删除所有学生信息成功!\n");
        getchar();
        saveflag=1;
    }
    else if(j==2)
    {
        stringinput(findmess,20,"请输入要删除的学生信息学号:");
        i=Locate(s,*pn,findmess,"number");
        if(i>=0)
        {
            p=s[i];
            free(p);
            for(;i<*pn-1;i++)
            {
                s[i]=s[i+1];
            }
            (*pn)--;
            printf("\n=====>删除成功!\n");
            getchar();
            saveflag=1;
        }
    }
    else if(j==3)
    {
        return;
    }
    else
        printf("输入有误,请输入正确的操作编号(1~3)\n");
        system("pause");
    }
}
void Modify(struct student * s[],int num)
{
    struct student * p;
    int i;
    char findmess[20];
    if(num<0)
    {
        system("cls");
        printf("=====>没有数据!\n");
        getchar();
        return;
    }
    system("cls");
    printf("修改学生信息");
    Disp(s,num);
    stringinput(findmess,20,"输入要修改的学生学号:");
    i=Locate(s,num,findmess,"number");
    if(i>=0)
    {
        p=s[i];
        printf("姓名:%s,",p->name);
        stringinput(p->name,20,"请输入新的姓名:");
        printf("年龄:%s,",p->age);
        stringinput(p->age,10,"请输入新的年龄:");
        printf("性别:%s,",p->sex);
        stringinput(p->sex,10,"请输入新的性别:");
        printf("出生年月:%s,",p->birth);
        stringinput(p->birth,15,"请输入新的出生年月:");
        printf("地址:%s,",p->address);
        stringinput(p->address,50,"请输入新的地址:");
        printf("电话:%s,",p->phone);
        stringinput(p->phone,20,"请输入新的电话:");
        printf("email:%s,",p->email);
        stringinput(p->email,20,"请输入新的email:");
        printf("高数成绩:%s,",p->math);
        stringinput(p->math,10,"请输入新的高数成绩:");
        printf("大学英语成绩:%s,",p->english);
        stringinput(p->english,10,"请输入新的大学英语成绩:");
        printf("c语言成绩:%s,",p->c);
        stringinput(p->c,10,"请输入新的c语言成绩:");
        printf("\n=====>修改成功");
        Disp(s,num);
        saveflag=1;
    }
    else
        Nofind();
    return;
}
void Count(int num)
{
    system("cls");
    printf("目前学生信息数量为:%d.\n",num);
    getchar();
    getchar();
}
void Sort(struct student * s[],int num)
{
    struct student * temp;
    int i,j;
    system("cls");
    Disp(s,num);
    if(num==0)
        return;
    for(i=0;i<num-1;i++)
        for(j=i+1;j<num;j++)
        {
            if(strcmp(s[i]->number,s[j]->number)>0);
            {
                temp=s[j];
                s[j]=s[i];
                s[i]=temp;
            }
        }
    Disp(s,num);
    saveflag=1;
    printf("\n=====>排序完成!");
    system("pause");
}
void Save(struct student * s[],int num)
{
    FILE *fp;
    struct student * p;
    int count=0;
    fp=fopen("C:\\Users\\lenovo\\Desktop\\高级语言程序设计实践课\\st","wb");
    if(fp==NULL)
    {
        printf("\n=====>打开文件失败!\n");
        getchar();
        return;
    }
    for(count=0;count<num;count++)
    {
        p=s[count];
        if(fwrite(p,sizeof(struct student),1,fp)!=1)
        {
            printf("写入失败!\n");
            break;
        }
    }
    if(count>0)
    {
        getchar();
        printf("\n\n\n\n\n====>保存学生信息成功,保存的学生信息数为:%d\n",count);
    }
    else
    {
        system("cls");
        printf("数据为空,保存文档成功!\n");
    }
    saveflag=0;
    getchar();
    fclose(fp);
}
void Myexit(struct student * s[],int num)
{
    char ch;
    if(saveflag==1)
    {
        getchar();
        printf("\n=====>是否保存信息进入数据库?(y/n):");
        scanf("%c",&ch);
        if(ch=='y'||ch=='Y')
            Save(s,num);
    }
    printf("\n=====>即将退出系统,感谢您的使用!\n");
}
void Menu()
{
    system("color f2");
    system("cls");
    printf("                                                                                          欢迎使用学生信息管理系统!                     \n");
    printf("                                                                             |-------------------------------------------------|        \n");
    printf("                                                                             |                 系统功能菜单                    |        \n");
    printf("                                                                             |-------------------------------------------------|        \n");
    printf("                                                                             |   0.系统帮助及说明   |   1.刷新系统页面         |        \n");
    printf("                                                                             |-------------------------------------------------|        \n");
    printf("                                                                             |   2.查询学生信息     |   3.统计学生信息         |        \n");
    printf("                                                                             |-------------------------------------------------|        \n");
    printf("                                                                             |   4.添加学生信息     |   5.删除学生信息         |        \n");
    printf("                                                                             |-------------------------------------------------|        \n");
    printf("                                                                             |   6.修改学生信息     |   7.保存学生信息         |        \n");
    printf("                                                                             |-------------------------------------------------|        \n");
    printf("                                                                             |   8.显示所有信息     |   9.排序学生信息         |        \n");
    printf("                                                                             |-------------------------------------------------|        \n");
    printf("                                                                             |   10.退出系统        |                          |        \n");
    printf("                                                                             |-------------------------------------------------|        \n");
}
void Help()
{
    printf("\n");
    printf("一、系统介绍:本系统是从学生信息管理的现状出发,根据学生管理的新要求进行设计研究的,它主要帮助管理人员有效管理学生信息。\n");
    printf("二、本系统主要实现以下功能:1.学生信息录入;2.学生信息查询;3.学生信息的增删;4.学生信息的修改。\n");
    printf("三、操作注意事项:操作时选择你要执行的操作编号即可,退出系统时请及时保存数据!!!");
    printf("感谢您的使用!\n");
    printf("\n");
    system("pause");
}
void main()
{
    int select;
    int num=0;
    struct student * s[MAX_NUM];
    if(Filehandle(s,&num)!=SUCCESS)
    exit(0);
    while(1)
    {
    Menu();
    printf("请输入你要执行的操作编号:");
    scanf("%d",&select);
    switch(select)
    {
    case 0:Help();break;
    case 1:Refresh();break;
    case 2:Find(s,num);break;
    case 3:Count(num);break;
    case 4:Add(s,&num);break;
    case 5:Delt(s,&num);break;
    case 6:Modify(s,num);break;
    case 7:Save(s,num);break;
    case 8:system("cls");Disp(s,num);system("pause");break;
    case 9:Sort(s,num);break;    
    case 10:Myexit(s,num);return;
    default:printf("输入有误,请输入正确操作编号!(0`7)\n");
    system("pause");
    }
    }
}
  • 写回答

2条回答 默认 最新

  • fuill 2021-12-30 19:57
    关注

    运行后显示什么
    测试可以打开界面的

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月7日
  • 已采纳回答 12月30日
  • 创建了问题 12月30日

悬赏问题

  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同