m0_51455672 2021-05-31 23:44 采纳率: 50%
浏览 20
已采纳

为什么输入一个节点后会停止运行啊?

 

 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
#include<time.h>
#define LEN sizeof(struct Student)
struct Student
{
    char num[100];
    char name[200];
    int grade;
    char sex[100];
    int age;
    char phone[200];
    char address[200];
    char birthday[200];
    char mail;
    struct Student *next;

};
void menu();
void staet();
void welcome();
char filename[30];

struct Student *Creat(int n)
{
 void menu_print_in(void);
 struct Student *head;
 struct Student *p1, *p2;

 system("cls");
 for(int i=1;i<n+1;i++) {
 p1 = (struct Student*)malloc(LEN);
 menu_print_in();
 scanf("%s%s%d%s%d%s%s%s%s",p1->num,p1->name,&p1->grade,p1->sex,
 &p1->age,p1->phone,p1->address,p1->birthday,p1->mail);
 p1->next = NULL;
 if(i==1)
 {
  head = p2 = p1;
 }
 else {
  p2->next = p1;
  p2 = p1;
 }
 }
 return(head);
}



    void WriteData_wb(struct Student *head)
    {
        FILE *fp;
        struct Student *p;
        if((fp=fopen(filename,"wb"))==NULL)
            printf("\a打开文件出错");
        p=head;
        while(p!=NULL)
        {
            if(fwrite(p,LEN,1,fp)!=1)
            {
                printf("写入数据失败\n");
                fclose(fp);
                return;
            }
            p=p->next;
        }
        fclose(fp);
    }

    void WriteData_ab(struct Student *head)
    {
        FILE *fp;
        struct Student *p;
        if((fp=fopen(filename,"ab"))==NULL)
            printf("\a打开文件出错");
        p=head;
        while(p!=NULL)
        {
            if(fwrite(p,LEN,1,fp)!=1)
            {
                printf("写入数据失败\n");
                fclose(fp);
                return;
            }
            p=p->next;
        }
        fclose(fp);
    }

    struct Student *ReadData(void)
    {
        struct Student *head=NULL;
        struct Student *p1,*p2;


        FILE *fp;
        if((fp=fopen(filename,"rb+"))==NULL)
        {
            printf("打开文件错误\n");
            exit(0);
        }
        while (!feof(fp))
        {
            if((p1=(struct Student*)malloc(LEN))==NULL)
            {
                printf("内存申请出错\n");
                fclose(fp);
                exit(0);
            }
            if(fread(p1,LEN,1,fp)!=1)
            {
                free(p1);
                break;
            }
            if(head==NULL)
            {
                head=p2=p1;
            }
            else
            {
                p2->next=p1;
                p2=p1;
            }
        }
         fclose(fp);
         return (head);
    }

     void display()             //全部查询
     {
        system("cls");
        void menu_print_out(void);
        struct Student *p;
        p=ReadData();
        menu_print_out();
        do
        {
            printf("%-10s%6s%4s%8s%4d%13s%11s%4s%4s",p->num,p->name,p->grade,p->sex,p->phone,p->address,p->birthday,p->mail);
            p=p->next;
            printf("\n\n");

        }while(p!=NULL);
        printf("\n\n");
     }

     int query_num()             //学号查询
     {
        system("cls");
        void menu_print_out();
        struct Student *p;
        char str_num[10];
        printf("请输入你要查询的学号\n");
        scanf("%s",str_num);
        p=ReadData();
        menu_print_out();
        do
        {   if(strcmp(p->num,str_num)==0)
           {
            printf("%-10s%6s%4d%8s%4d%13s%11s%4s%4s",p->num,p->name,p->grade,p->sex,p->phone,p->address,p->birthday,p->mail);
            printf("\n\n");
            return 0;
           }
            p=p->next;
        }while(p!=NULL);
        printf("数据库中没有你要找的数据\n");
        printf("\n\n");
        return 0;

     }

     int query_name()             //姓名查询
     {
        system("cls");
        void menu_print_out(void);
        struct Student *p;
        char str_name[30];
        printf("请输入你要查询的姓名\n");
        scanf("%s",str_name);
        p=ReadData();
        menu_print_out();
        do
        {   if(strcmp(p->name,str_name)==0)
           {
            printf("%-10s%6s%4d%8s%4d%13s%11s%4s%4s",p->num,p->name,p->grade,p->sex,p->phone,p->address,p->birthday,p->mail);
            printf("\n\n");
            return 0;
           }
            p=p->next;
        }while(p!=NULL);
        printf("数据库中没有你要找的数据\n");
        printf("\n\n");
        return 0;

     }


    int delStudent()                             //修改数据之删除记录
    {
        struct Student *p1,*p2,*head;
        char str_num[20];
        printf("请输入你要删除的学号\n");
        scanf("%s",str_num);
        p1=ReadData;
        p2=p1->next;
        head=p1;
        while(p2!=NULL)
        {
            if(strcmp(p1->num,str_num)==0)
            {
                WriteData_wb(p2);
                return 0;
            }
            else if(strcmp(p2->num,str_num)==0)
            {
                p1->next=p2->next;
                WriteData_wb(head);
                return 0;

            }
            p2=p2->next;
            p1=p1->next;


        }
        if(p2==NULL)
            printf("数据库里没有储存你要删除的数据\n");
            printf("\n\n");
            return 0;


    }

    int change1()           //修改数据之修改记录

    {
        void menu_print_in(void);
        struct Student *p1,*p2,*head;
        char str_num[20];
        printf("请输入你要修改的学号信息\n");
        scanf("%s",str_num);
        p1=ReadData;
        p2=p1->next;
        head=p1;
        while(p2!=NULL)
        {
            if(strcmp(p1->name,str_num)==0){
            menu_print_in();
            scanf("%s%s%d%s%d%s%s%s%s",p1->num,p1->name,p1->grade,p1->sex,&p1->age,p1->phone,p1->address,p1->birthday,p1->mail);
            WriteData_wb(head);
            return 0;


            }

            else if(strcmp(p2->name,str_num)==0)
            {
                menu_print_in();
                scanf("%s%s%d%s%d%s%s%s%s",p1->num,p1->name,p1->grade,p1->sex,&p1->age,p1->phone,p1->address,p1->birthday,p1->mail);
                WriteData_wb(head);
                return 0;

            }
            p2=p2->next;
            p1=p1->next;


        }
        if(p2==NULL)
        printf("数据库中没有你要修改的数据\n");
        return 0;


    }


    void sort_message_order()

{
    struct Student *Back,*pointer,*head;
    struct Student  temp;
    head=Back=pointer=ReadData();

    while(Back!=NULL)
    {
        while(pointer->next!=NULL)
        {
            pointer=pointer->next;
            if ( strcmp( Back->grade,pointer->grade)>0  )
            {
                strcpy(temp.grade,Back->grade);
                strcpy(temp.name,Back->name);


                strcpy( Back->grade,pointer->grade);
                strcpy(Back->name,pointer->name);



                strcpy(pointer->grade,temp.grade);
                strcpy(pointer->name,temp.name);

            }
        }
        Back=Back->next;
        pointer=Back;



    }
    while(head!=NULL)
    {
        printf("%5s%d",head->name,head->grade);
        head=head->next;
        printf("\n\n");

    }
    printf("\n\n");

}

void sort_message_Desc()
{
    struct Student *Back,*pointer,*head;
    struct Student  temp;
    head=Back=pointer=ReadData();

    while(Back!=NULL)
    {
        while(pointer->next!=NULL)
        {
            pointer=pointer->next;
            if ( strcmp( Back->grade,pointer->grade)>0  )
            {
                strcpy(temp.grade,Back->grade);
                strcpy(temp.name,Back->name);


                strcpy( Back->grade,pointer->grade);
                strcpy(Back->name,pointer->name);



                strcpy(pointer->grade,temp.grade);
                strcpy(pointer->name,temp.name);

            }
        }
        Back=Back->next;
        pointer=Back;



    }
    while(head!=NULL)
    {
        printf("%5s%d",head->name,head->grade);
        head=head->next;
        printf("\n\n");

    }
    printf("\n\n");

}


void start() //欢迎界面
{
 system("color 1E");
 printf("\n\n\n\n\n\n\n\n\n\t\t\t⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙\n");
 printf("\t\t\t⊙    ⊙\n");
 printf("\t\t\t⊙ 欢迎使用学生信息管理系统 ⊙\n");
 printf("\t\t\t⊙    ⊙\n");
 printf("\t\t\t⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙\n");
 printf("\n\t\t\t\t系统开始启动.........\n");
 printf("===============================================================================\r");
 for(int i=1;i<80;i++)
 {
  Sleep(40);
  printf(">");
 }
 system("CLS");
 welcome();
}
void welcome()//登录界面
{
 system("CLS");
 system("color 2");
 printf("\n\n\n\n\n\n\t\t\t★★★★★★★★★★★★★★★★\n");
 printf("\t\t\t★    ★\n");
 printf("\t\t\t★ 欢迎使用学生信息管理系统 ★\n");
 printf("\t\t\t★    ★\n");
 printf("\t\t\t★ 设计者:zed ★\n");
 printf("\t\t\t★    ★\n");
 printf("\t\t\t★ 日期:2021.5.31 ★\n");
 printf("\t\t\t★    ★\n");
 printf("\t\t\t★★★★★★★★★★★★★★★★\n");

 printf("\n\t\t\t按任意键继续...");
 getchar();
 system("CLS");
 menu();
}
//主菜单
void menu()
{
 void addStudent();
 void query();
 int File_name();
 void change();
 system("CLS");
 system("color D");
 printf("\t\t\t★★★★★★主菜单※※※※※\n");
 printf("\n\n\n\n\n\t\t\t※※※※※※※※※※※※※※\n");
 printf("\t\t\t※   ※\n");
 printf("\t\t\t※ 1.录入学生信息 ※\n");
 printf("\t\t\t※------------------------※\n");
 printf("\t\t\t※ 2.查询学生信息 ※\n");
 printf("\t\t\t※------------------------※\n");
 printf("\t\t\t※ 3.修改学生信息 ※\n");
 printf("\t\t\t※------------------------※\n");
 printf("\t\t\t※ 4.排序学生成绩 ※\n");
 printf("\t\t\t※------------------------※\n");
 printf("\t\t\t※ 5. 退出系统 ※\n");
 printf("\t\t\t※------------------------※\n");
 printf("\t\t\t※※※※※※※※※※※※※※\n");
 printf("\n\t\t请输入功能前的序号选择服务项目:");

 int a = 0;
 a = getchar();

 while(a!='1'&&a!='2'&&a!='3'&&a!='4'&&a!='5') {
 printf("错误,请输入正确的号码!\n");
 putchar('\a');
 getchar();
 printf("\n\t\t请输入功能前的序号选择服务项目:");
 a = getchar();
 }
 switch(a) {
 case '1': File_name();addStudent();
 break;
 case '2': File_name();query();
 break;
 case '3': File_name();change();
 break;
 case '4': File_name();sort();
 break;
 case '5': exit(0);
 break;
 }
 getchar();
}

int File_name()
{
 printf("\n\t\t请输入您要打开的文件:");
 if(scanf("%s", filename)!=1)
 printf("\a error!");
 return 0;
}
//二级菜单之添加数据
void addStudent()
{
 int Creat_num();
 system("cls");
 getchar();
 system("CLS");
 system("color B");
 printf("\t\t\t★★★★★★添加数据※※※※※\n");
 printf("\n\n\n\n\n\t\t\t※※※※※※※※※※※※※\n");
 printf("\t\t\t※   ※\n");
 printf("\t\t\t※ 1. 新建文件 ※\n");
 printf("\t\t\t※----------------------※\n");
 printf("\t\t\t※ 2. 增添数据 ※\n");
 printf("\t\t\t※----------------------※\n");
 printf("\t\t\t※ 3. 返回菜单 ※\n");
 printf("\t\t\t※----------------------※\n");
 printf("\t\t\t※※※※※※※※※※※※※\n");
 printf("\n\t\t请输入功能前的序号选择服务项目:");

 int a = 0;
 a = getchar();

 while(a!='1'&&a!='2'&&a!='3')
 {
 printf("错误,请输入正确的号码!\n");
 putchar('\a');
 getchar();
 printf("\n\t\t请输入功能前的序号选择服务项目:");
 a = getchar();
 }
 switch(a) {
 case '1': WriteData_wb(Creat(Creat_num()));
  printf("\n新建文件成功且数据已成功保存\n");
  system("pause");
  system("cls");
  addStudent();
 break;
 case '2': WriteData_ab(Creat(Creat_num()));
  printf("\n数据已成功添加\n");
  system("pause");
  system("cls");
  addStudent();
 break;
 case '3': system("cls");
  getchar();
  menu();
 break;
 }
}

//二级菜单之查询数据
void query()
{
 system("cls");
 getchar();
 while(1)
 {
 system("CLS");
 system("color C");
 printf("\t\t\t★★★★★查询数据※※※※※\n");
 printf("\n\n\n\n\n\t\t\t※※※※※※※※※※※※※※\n");
 printf("\t\t\t※   ※\n");
 printf("\t\t\t※ 1.全部查询 ※\n");
 printf("\t\t\t※------------------------※\n");
 printf("\t\t\t※ 2.学号查询 ※\n");
 printf("\t\t\t※------------------------※\n");
 printf("\t\t\t※ 3.姓名查询 ※\n");
 printf("\t\t\t※------------------------※\n");
 printf("\t\t\t※ 4.返回菜单 ※\n");
 printf("\t\t\t※------------------------※\n");
 printf("\t\t\t※※※※※※※※※※※※※※\n");
 printf("\n\t\t请输入功能前的序号选择服务项目:");
 int a = 0;
 a = getchar();

 while(a!='1'&&a!='2'&&a!='3'&&a!='4')
 {
  printf("错误,请输入正确的号码!\n");
  putchar('\a');
  getchar();
  printf("\n\t\t请输入功能前的序号选择服务项目:");
  a = getchar();
 }
 switch(a) {
  case '1': display();system("pause");getchar();
  break;
  case '2': query_num();system("pause");getchar();
  break;
  case '3': query_name();system("pause");getchar();
  break;
  case '4': system("cls");getchar();menu();
  break;
 }
 }
}
int Creat_num() {
 printf("\n\t\t请输入您要添加的数据个数:");
 int n;
 if(scanf("%d", &n)!=1) {
 printf("\a error!");
 }
 return n;
}
//二级菜单之修改数据/
void change()
{
 system("cls");
 getchar();
 while(1)
 {
 system("CLS");
 system("color A");
 printf("\t\t\t★★★★★★修改数据※※※※※\n");
 printf("\n\n\n\n\n\t\t\t※※※※※※※※※※※※※※\n");
 printf("\t\t\t※   ※\n");
 printf("\t\t\t※ 1.删除记录 ※\n");
 printf("\t\t\t※------------------------※\n");
 printf("\t\t\t※ 2.修改记录 ※\n");
 printf("\t\t\t※------------------------※\n");
 printf("\t\t\t※ 3.返回菜单 ※\n");
 printf("\t\t\t※------------------------※\n");
 printf("\t\t\t※※※※※※※※※※※※※※\n");
 printf("\n\t\t请输入功能前的序号选择服务项目:");

 int a = 0;
 a = getchar();

 while(a!='1'&&a!='2'&&a!='3')
 {
 printf("错误,请输入正确的号码!\n");
 putchar('\a');
 getchar();
 printf("\n\t\t请输入功能前的序号选择服务项目:");
 a = getchar();
 }
 switch(a) {
  case '1': delStudent();
  printf("\n\n已成功删除指定数据\n");
  system("pause");
  getchar();
  break;
  case '2': change1();
   printf("\n\n已成功修改指定数据\n");
  system("pause");
   getchar();
  break;
  case '3': system("cls");
  getchar();
  menu();
  break;
 }
 }
}
void sort()
{
 system("cls");
 getchar();
 while(1)
 {
 system("CLS");
 system("color D");
 printf("\t\t\t★★★★★排序成绩※※※※※\n");
 printf("\n\n\n\n\n\t\t\t※※※※※※※※※※※※※※\n");
 printf("\t\t\t※   ※\n");
 printf("\t\t\t※ 1.升序排名 ※\n");
 printf("\t\t\t※------------------------※\n");
 printf("\t\t\t※ 2.降序排名 ※\n");
 printf("\t\t\t※------------------------※\n");
 printf("\t\t\t※ 3.返回菜单 ※\n");
 printf("\t\t\t※------------------------※\n");
 printf("\t\t\t※※※※※※※※※※※※※※\n");
 printf("\n\t\t请输入功能前的序号选择服务项目:");
 int a = 0;
 a = getchar();

 while(a!='1'&&a!='2'&&a!='3')
 {
  printf("错误,请输入正确的号码!\n");
  putchar('\a');
  getchar();
  printf("\n\t\t请输入功能前的序号选择服务项目:");
  a = getchar();
 }
 switch(a) {
  case '1': sort_message_order();system("pause");getchar();
  break;
  case '2': sort_message_Desc();system("pause");getchar();
  break;
  case '3': system("cls");getchar();menu();
  break;
 }
 }
}

//输入输出提示栏
void menu_print_in() {
 printf("------------------------------------------------------------------------\n");
 printf("学号 姓名 成绩 性别 年龄 电话  地址 生日 邮件 \n");
 printf("------------------------------------------------------------------------\n");
}
void menu_print_out(void) {
 printf("--------------------------------------------------------------------------\n");
 printf("学号 姓名 成绩 性别 年龄 电话  地址 生日 邮件 \n");
 printf("--------------------------------------------------------------------------\n");
}

//主函数
int main()
{
 start();
 return 0;
}
  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-06-01 05:52
    关注

    把mail定义为char[100],不能是char

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!