weixin_38699017 2017-06-04 12:22 采纳率: 100%
浏览 995
已采纳

教务信息管理系统,一旦录入选课内容并退出系统再次运行就会出错,求大神帮忙debug,急!

教务信息管理系统,一旦录入选课内容并退出系统再次运行就会出错,求大神帮忙debug,急!

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "ctype.h"

struct stu
{
int id;//账号
char name[100];//姓名
int clas;//班级
char sex[6];//性别
int age;//年龄
int dor;//宿舍号码
char key[12];//密码
char phone[12];//电话号码
int score;
struct stu * next;
struct cla * cla;
}*p1,stu1;

struct tec //教师结构体
{
int id;
char name[100];
char sex[6];
char cla_name[100];
int cla_id;//课程编号
char phone[12];
char key[12];
int score;
char email[30];
struct cla * cla;
struct tec * next;
}tec1;

struct cla //学生课程结构体 课程编号、课程名称、考试成绩、平时成绩、综合成绩、学分、重修否
{
int id;//学生id
char name[100];
char stu_name[100];
float e_score;
float n_score;
float t_score;
int score;//学分
struct cla *next;
struct res *res;
struct cla *follow;
struct cla *tec;
}cla1;

struct res //重修结构体 重修学期、重修成绩,并且要考虑多次重修
{
int id;
char name[100]; //course name
int semester;
float score;
int times;
struct res * next;
struct res * follow;
}res1;

struct order // 为了学生成绩排名
{
struct cla *pointer;
struct order *next;
};

struct info //信息结构体
{
int num; // the amount of stu or cla or res
char key[11];
}in1,in2,in3,in4;

struct info2
{
char name[500];
char note[500];
int i;
struct info2 *next;
};

FILE *fp3,*fp1,*fp2,*fp4;

struct stu * head=NULL,*p1,*p2;
struct tec * head_tec=NULL;
struct cla * clap,*headc;
struct res * resp,*headr;

//definition
void apple_ID();//用户注册
void file_open();//用来打开文件和构建链表
void file_close();
void insert_stu(struct stu stu1);//学生结构体插入
void insert_tec(struct tec tec1);//教师结构体插入
struct cla * insert_cla1(struct cla cla1);//将课程插入学生
void insert_cla2(struct cla cp);//将课程插入教师
void insert_res(struct res res1);//插入重修
void input_stu();//学生录入
void input_tec();//教师录入
void input_cla();//课程录入
void input_res();//重修录入
void copy_tec(struct tec *p1,struct tec tec1);//用于复制 减少代码量
void copy_stu(struct stu *p1,struct stu stu1);// 用于复制 减少代码量
void del_stu();//删除学生信息
void del_tec();//删除教师信息
void del_res();//删除重修信息
void pfree_res(struct cla *p,struct res res1);//解锁及释放重修内存
void pfree_cla(struct stu *p_stu,struct tec *p_tec,struct cla cla1);//解锁及释放课程内存
void modify_stu(struct stu *p);// 学生修改自己信息
void modify_tec(struct tec *p);// 教师修改自己信息
void modify_stu_adm();//管理员进入某一学生系统 修改学生信息 如密码
void modify_tec_adm();//管理员进入某一教师系统 修改教师信息 如密码
void skim_stu(struct stu *head);//按ID或名字查看学生信息
void skim_tec(struct tec *head);//按id或名字查看教师
void skim_stu_all();//查看所有学生学分及不及格课程
void skim_tec_all();//查看所有教师
void skim_stu_course();// 根据课程查看学生 管理员功能
void skim_stu_class();// 根据班级查看学生 管理员功能
void skim_list_stu(struct tec * p);//教师查看所有选自己课的学生
struct order * list(struct cla *head);// 学生分数排序 返回链表头 to make a list of stu
void print_stu(struct stu
p1);//输出学生
void adm_ui_1();//学生界面
void adm_ui_2();//教师界面
void stu_ui(struct stu p);//管理员界面1
void tec_ui(struct tec *p);//管理员界面2
void adm_key();//管理员密码修改
void st_key_stu(struct stu *p);//学生密码修改
void st_key_tec(struct tec *p);//教师密码修改
void key_adm();//管理员密码验证 只要密码
void key_stu();//学生ID与密码验证
void key_tec();//教师ID与密码验证
void stu_score(struct tec * p);//教师查看学生分数 按id
void tec_score(struct tec *head);//give score to someone 教师给分
int score_stu(struct stu
p);// 计算学生学分
void select_s(struct stu * p);//学生选课选修
int idc(char * id);//id装换 char 到int
void key(char *key);//以星号形式接受密码并放到地址key上
struct info2 *Rfile2(struct info2 *head_note);
void Savenote(struct info2 *head_note);
struct info2 *First2(struct info2 *head_note);
void watchall(struct info2 *head_note);
struct info2 *leavenote(struct info2 *head_note);
struct info2 *notesys(struct info2 *head_note);

main()
{
int z;
system("cls");
file_open();
do
{
printf("\n\t\t\t+---------------------------+\n");
printf("\t\t\t| 欢迎使用教务信息管理系统 |\n");
printf("\t\t\t+---------------------------+\n");
printf("提示:为保证您的操作得到保存,请按正常顺序退出系统^_^\n");
printf("\n\t\t\t--------------------------------\n");
printf("\t\t\t+ 主菜单 |\n");
printf("\t\t\t--------------------------------\n");
printf("\t\t\t+ [1]----学生登录 |\n");
printf("\t\t\t+ [2]----教师登录 |\n");
printf("\t\t\t+ [3]----管理员登陆 |\n");
printf("\t\t\t+ [4]----用户注册 |\n");
printf("\t\t\t+ [0]----退出系统 |\n");
printf("\t\t\t--------------------------------\n");
printf("请输入您的选择:");
scanf("%d", &z);
switch(z)
{
case 0 : break;
case 1 :key_stu();break;
case 2 :key_tec();break;
case 3 :key_adm();break;
case 4 :apple_ID();break;
default:printf("\n无效选项!");
}
}
while(z!=0);
file_close(); // to free all the pointer and input data to file
}

void file_open() //用来打开文件和构建链表 head 和 head_tec 是全局变量
{
struct stu stu1;
struct cla cla1;
struct res res1;
struct cla *cp;
int a1=0,a2=0,a3=0,a4=0;
if((fp1=fopen("stu","rb"))==NULL||(fp2=fopen("cla","rb"))==NULL||(fp3=fopen("res","rb"))==NULL||(fp4=fopen("tec","rb"))==NULL) //can't open the file
{
if((fp1=fopen("stu","wb"))==NULL||(fp2=fopen("cla","wb"))==NULL||(fp3=fopen("res","wb"))==NULL||(fp4=fopen("tec","wb"))==NULL)
printf("\nSomething Wrong!"); exit(0);
}
else // open file successfully
{
fread(&in1,sizeof(struct info),1,fp1);
fread(&in2,sizeof(struct info),1,fp2);
fread(&in3,sizeof(struct info),1,fp3);
fread(&in4,sizeof(struct info),1,fp4);
strcpy(in2.key,"19931101");
if(in1.num==0&&in2.num==0) strcpy(in1.key,"123456");
// create a linked list
// add stu struct
while(fread(&stu1,sizeof(struct stu),1,fp1))
{
insert_stu(stu1);
}
fclose(fp1);
while(fread(&tec1,sizeof(struct tec),1,fp4))
{
insert_tec(tec1);
}
fclose(fp4);
while(fread(&cla1,sizeof(struct cla),1,fp2))
{
cp=insert_cla1(cla1);
if(cp!=NULL) insert_cla2(cp);
}
fclose(fp2);
}
while(fread(&res1,sizeof(struct res),1,fp3))
{
insert_res(res1);
}
fclose(fp3);
}

void file_close() //head和head_tec是全局变量
{
struct stu *p1,*p11;
struct cla *p2,*p21;
struct res *p3,*p31;
struct tec *p4,*p41;
fp1=fopen("stu","wb");
fp2=fopen("cla","wb");
fp3=fopen("res","wb");
fp4=fopen("tec","wb");

fwrite(&in1,sizeof(struct info),1,fp1);
fwrite(&in2,sizeof(struct info),1,fp2);
fwrite(&in3,sizeof(struct info),1,fp3);
fwrite(&in4,sizeof(struct info),1,fp4);

p1=head;
while(p1!=NULL)
{
    fwrite(&(*p1),sizeof(struct stu),1,fp1);
    p11=p1;
    p1=p1->next;
    free(p11);
}

p4=head_tec;
while(p4!=NULL)
{
    fwrite(&(*p4),sizeof(struct tec),1,fp4);
    p41=p4;
    p4=p4->next;
    free(p41);
}

p2=headc;
while(p2!=NULL)
{
    fwrite(&(*p2),sizeof(struct cla),1,fp2);
    p21=p2;
    p2=p2->follow;
    free(p21);
}
p3=headr;
while(p3!=NULL)
{
    fwrite(&(*p3),sizeof(struct res),1,fp3);
    p31=p3;
    p3=p3->follow;
    free(p31);
}
printf("\nSaved!\n");

}

  • 写回答

2条回答 默认 最新

  • weixin_38699017 2017-06-04 12:23
    关注

    完整代码在这里

    #include "stdio.h"
    #include "string.h"
    #include "stdlib.h"
    #include "ctype.h"

    struct stu // 学生结构体 学号、姓名、性别、年龄、宿舍号码、电话号码
    {
    int id;//账号
    char name[100];//姓名
    int clas;//班级
    char sex[6];//性别
    int age;//年龄
    int dor;//宿舍号码
    char key[12];//密码
    char phone[12];//电话号码
    int score;
    struct stu * next;
    struct cla * cla;
    }*p1,stu1;

    struct tec //教师结构体
    {
    int id;
    char name[100];
    char sex[6];
    char cla_name[100];
    int cla_id;//课程编号
    char phone[12];
    char key[12];
    int score;
    char email[30];
    struct cla * cla;
    struct tec * next;
    }tec1;

    struct cla //学生课程结构体 课程编号、课程名称、考试成绩、平时成绩、综合成绩、学分、重修否
    {
    int id;//学生id
    char name[100];
    char stu_name[100];
    float e_score;
    float n_score;
    float t_score;
    int score;//学分
    struct cla *next;
    struct res *res;
    struct cla *follow;
    struct cla *tec;
    }cla1;

    struct res //重修结构体 重修学期、重修成绩,并且要考虑多次重修
    {
    int id;
    char name[100]; //course name
    int semester;
    float score;
    int times;
    struct res * next;
    struct res * follow;
    }res1;

    struct order // 为了学生成绩排名
    {
    struct cla *pointer;
    struct order *next;
    };

    struct info //信息结构体
    {
    int num; // the amount of stu or cla or res
    char key[11];
    }in1,in2,in3,in4;

    struct info2
    {
    char name[500];
    char note[500];
    int i;
    struct info2 *next;
    };

    FILE *fp3,*fp1,*fp2,*fp4;

    struct stu * head=NULL,*p1,*p2;
    struct tec * head_tec=NULL;
    struct cla * clap,*headc;
    struct res * resp,*headr;

    //definition
    void apple_ID();//用户注册
    void file_open();//用来打开文件和构建链表
    void file_close();
    void insert_stu(struct stu stu1);//学生结构体插入
    void insert_tec(struct tec tec1);//教师结构体插入
    struct cla * insert_cla1(struct cla cla1);//将课程插入学生
    void insert_cla2(struct cla cp);//将课程插入教师
    void insert_res(struct res res1);//插入重修
    void input_stu();//学生录入
    void input_tec();//教师录入
    void input_cla();//课程录入
    void input_res();//重修录入
    void copy_tec(struct tec *p1,struct tec tec1);//用于复制 减少代码量
    void copy_stu(struct stu *p1,struct stu stu1);// 用于复制 减少代码量
    void del_stu();//删除学生信息
    void del_tec();//删除教师信息
    void del_res();//删除重修信息
    void pfree_res(struct cla *p,struct res res1);//解锁及释放重修内存
    void pfree_cla(struct stu *p_stu,struct tec *p_tec,struct cla cla1);//解锁及释放课程内存
    void modify_stu(struct stu *p);// 学生修改自己信息
    void modify_tec(struct tec *p);// 教师修改自己信息
    void modify_stu_adm();//管理员进入某一学生系统 修改学生信息 如密码
    void modify_tec_adm();//管理员进入某一教师系统 修改教师信息 如密码
    void skim_stu(struct stu *head);//按ID或名字查看学生信息
    void skim_tec(struct tec *head);//按id或名字查看教师
    void skim_stu_all();//查看所有学生学分及不及格课程
    void skim_tec_all();//查看所有教师
    void skim_stu_course();// 根据课程查看学生 管理员功能
    void skim_stu_class();// 根据班级查看学生 管理员功能
    void skim_list_stu(struct tec * p);//教师查看所有选自己课的学生
    struct order * list(struct cla *head);// 学生分数排序 返回链表头 to make a list of stu
    void print_stu(struct stu
    p1);//输出学生
    void adm_ui_1();//学生界面
    void adm_ui_2();//教师界面
    void stu_ui(struct stu p);//管理员界面1
    void tec_ui(struct tec *p);//管理员界面2
    void adm_key();//管理员密码修改
    void st_key_stu(struct stu *p);//学生密码修改
    void st_key_tec(struct tec *p);//教师密码修改
    void key_adm();//管理员密码验证 只要密码
    void key_stu();//学生ID与密码验证
    void key_tec();//教师ID与密码验证
    void stu_score(struct tec * p);//教师查看学生分数 按id
    void tec_score(struct tec *head);//give score to someone 教师给分
    int score_stu(struct stu
    p);// 计算学生学分
    void select_n(struct stu * p);//学生选课必修
    void select_s(struct stu * p);//学生选课选修
    int idc(char * id);//id装换 char 到int
    void key(char *key);//以星号形式接受密码并放到地址key上
    struct info2 *Rfile2(struct info2 *head_note);
    void Savenote(struct info2 *head_note);
    struct info2 *First2(struct info2 *head_note);
    void watchall(struct info2 *head_note);
    struct info2 *leavenote(struct info2 *head_note);
    struct info2 *notesys(struct info2 *head_note);

    main()
    {
    int z;
    system("cls");
    file_open();
    do
    {
    printf("\n\t\t\t+---------------------------+\n");
    printf("\t\t\t| 欢迎使用教务信息管理系统 |\n");
    printf("\t\t\t+---------------------------+\n");
    printf("提示:为保证您的操作得到保存,请按正常顺序退出系统^_^\n");
    printf("\n\t\t\t--------------------------------\n");
    printf("\t\t\t+ 主菜单 |\n");
    printf("\t\t\t--------------------------------\n");
    printf("\t\t\t+ [1]----学生登录 |\n");
    printf("\t\t\t+ [2]----教师登录 |\n");
    printf("\t\t\t+ [3]----管理员登陆 |\n");
    printf("\t\t\t+ [4]----用户注册 |\n");
    printf("\t\t\t+ [0]----退出系统 |\n");
    printf("\t\t\t--------------------------------\n");
    printf("请输入您的选择:");
    scanf("%d", &z);
    switch(z)
    {
    case 0 : break;
    case 1 :key_stu();break;
    case 2 :key_tec();break;
    case 3 :key_adm();break;
    case 4 :apple_ID();break;
    default:printf("\n无效选项!");
    }
    }
    while(z!=0);
    file_close(); // to free all the pointer and input data to file
    }

    void file_open() //用来打开文件和构建链表 head 和 head_tec 是全局变量
    {
    struct stu stu1;
    struct cla cla1;
    struct res res1;
    struct cla *cp;
    int a1=0,a2=0,a3=0,a4=0;
    if((fp1=fopen("stu","rb"))==NULL||(fp2=fopen("cla","rb"))==NULL||(fp3=fopen("res","rb"))==NULL||(fp4=fopen("tec","rb"))==NULL) //can't open the file
    {
    if((fp1=fopen("stu","wb"))==NULL||(fp2=fopen("cla","wb"))==NULL||(fp3=fopen("res","wb"))==NULL||(fp4=fopen("tec","wb"))==NULL)
    printf("\nSomething Wrong!"); exit(0);
    }
    else // open file successfully
    {
    fread(&in1,sizeof(struct info),1,fp1);
    fread(&in2,sizeof(struct info),1,fp2);
    fread(&in3,sizeof(struct info),1,fp3);
    fread(&in4,sizeof(struct info),1,fp4);
    strcpy(in2.key,"19931101");
    if(in1.num==0&&in2.num==0) strcpy(in1.key,"123456");
    // create a linked list
    // add stu struct
    while(fread(&stu1,sizeof(struct stu),1,fp1))
    {
    insert_stu(stu1);
    }
    fclose(fp1);
    while(fread(&tec1,sizeof(struct tec),1,fp4))
    {
    insert_tec(tec1);
    }
    fclose(fp4);
    while(fread(&cla1,sizeof(struct cla),1,fp2))
    {
    cp=insert_cla1(cla1);
    if(cp!=NULL) insert_cla2(cp);
    }
    fclose(fp2);
    }
    while(fread(&res1,sizeof(struct res),1,fp3))
    {
    insert_res(res1);
    }
    fclose(fp3);
    }

    void file_close() //head和head_tec是全局变量
    {
    struct stu *p1,*p11;
    struct cla *p2,*p21;
    struct res *p3,*p31;
    struct tec *p4,*p41;
    fp1=fopen("stu","wb");
    fp2=fopen("cla","wb");
    fp3=fopen("res","wb");
    fp4=fopen("tec","wb");

    fwrite(&in1,sizeof(struct info),1,fp1);
    fwrite(&in2,sizeof(struct info),1,fp2);
    fwrite(&in3,sizeof(struct info),1,fp3);
    fwrite(&in4,sizeof(struct info),1,fp4);
    
    p1=head;
    while(p1!=NULL)
    {
        fwrite(&(*p1),sizeof(struct stu),1,fp1);
        p11=p1;
        p1=p1->next;
        free(p11);
    }
    
    p4=head_tec;
    while(p4!=NULL)
    {
        fwrite(&(*p4),sizeof(struct tec),1,fp4);
        p41=p4;
        p4=p4->next;
        free(p41);
    }
    
    p2=headc;
    while(p2!=NULL)
    {
        fwrite(&(*p2),sizeof(struct cla),1,fp2);
        p21=p2;
        p2=p2->follow;
        free(p21);
    }
    p3=headr;
    while(p3!=NULL)
    {
        fwrite(&(*p3),sizeof(struct res),1,fp3);
        p31=p3;
        p3=p3->follow;
        free(p31);
    }
    printf("\nSaved!\n");
    

    }

    void apple_ID()
    {
    int z;
    file_open();

    system("cls");
    do
    {
        printf("\n\t\t\t--------------------------------\n");
        printf("\t\t\t+    华南农业大学教务处欢迎您。|\n");
        printf("\t\t\t--------------------------------\n");
        printf("\t\t\t+    [1]----学生注册           |\n");
        printf("\t\t\t+    [2]----教师注册           |\n");
        printf("\t\t\t+    [0]----返回主界面         |\n");
        printf("\t\t\t--------------------------------\n");
        printf("请输入您的选择:");
        scanf("%d", &z);
        switch(z)
        {
        case 0 :    break;
        case 1 :input_stu(head);break;
        case 2 :input_tec(head_tec);break;
        default:printf("\n无效选项!");
        }
        }while(z!=0);
    

    }

    void insert_stu(struct stu stu1) //学生结构体插入
    {
    struct stu *p2,*p3;
    if(head==NULL) // empty linked list
    {
    p1=(struct stu *)malloc(sizeof(struct stu));
    head=p1;
    copy_stu(p1,stu1);
    p1->next=NULL;
    p1->cla=NULL;
    in1.num++;
    }
    else
    {
    p2=head; p3=head;
    while(p2!=NULL)
    {
    if(p2->id>=stu1.id) break;
    p3=p2;
    p2=p2->next;
    }
    if(p2==NULL||p2->id>stu1.id)
    {
    p2=(struct stu *)head;
    if(p2->id>stu1.id) //insert at the head
    {
    p1=(struct stu *)malloc(sizeof(struct stu));
    copy_stu(p1,stu1);
    p1->next=head;
    p1->cla=NULL;
    in1.num++;
    head=p1;
    }
    else //insert at the middle or at the end
    {
    while(p2->idnext!=NULL) // to find the point to insert
    {
    if(p2->id==stu1.id) break;
    p3=p2;p2=p2->next;
    }
    if(p2->next==NULL&&p2->id {
    p1=(struct stu *)malloc(sizeof(struct stu));
    copy_stu(p1,stu1);
    p1->next=NULL;
    p1->cla=NULL;
    in1.num++;
    p2->next=p1;
    }
    else //insert at the middle
    {
    p1=(struct stu *)malloc(sizeof(struct stu));
    copy_stu(p1,stu1);
    p1->next=p2;
    p1->cla=NULL;
    in1.num++;
    p3->next=p1;
    }

             }
        }
        else printf("\n该生已存在。");
    }
    

    }

    void insert_tec(struct tec tec1) //教师结构体插入
    {
    struct tec *p1,*p2,*p3;
    if(head_tec==NULL) // empty linked list
    {
    p1=(struct tec *)malloc(sizeof(struct tec));
    head_tec=p1;
    p1->id=tec1.id;
    copy_tec(p1,tec1);
    p1->next=NULL;
    in4.num++;
    p1->cla=NULL;
    }
    else
    {
    p2=head_tec;
    p3=head_tec;
    while(p2!=NULL)
    {
    if(p2->id>=tec1.id) break;
    p3=p2;
    p2=p2->next;
    }
    if(p2==NULL||p2->id>tec1.id)
    {
    p2=(struct tec *)head_tec;
    if(p2->id>tec1.id) //insert at the head
    {
    p1=(struct tec *)malloc(sizeof(struct tec));
    p1->id=tec1.id;
    copy_tec(p1,tec1);
    p1->next=head_tec;
    p1->cla=NULL;
    in4.num++;
    head_tec=p1;
    }
    else //insert at the middle or at the end
    {
    while(p2->idnext!=NULL) // to find the point to insert
    {
    p3=p2;
    p2=p2->next;
    }

            if(p2->next==NULL&&p2->id<tec1.id) // insert at the end
            {
                p1=(struct tec *)malloc(sizeof(struct tec));
                p1->id=tec1.id;
                copy_tec(p1,tec1);
                p1->next=NULL;
                p1->cla=NULL;
                in4.num++;
                p2->next=p1;
            }
            else //insert at the middle
            {
                p1=(struct tec *)malloc(sizeof(struct tec));
                 p1->id=tec1.id;
                copy_tec(p1,tec1);
                p1->next=p2;
                p1->cla=NULL;
                in4.num++;
                p3->next=p1;
            }
        }
        }
        else printf("\n该教师已存在。");
    
    }
    

    }

    struct cla * insert_cla1(struct cla cla1) //将课程插入学生
    {
    struct cla p1,*p2,*p3;
    struct stu *p;
    p=(struct stu *)head;
    while(p->id!=cla1.id&&p->next!=NULL&&p->id {
    p=p->next;
    }
    if((p->next==NULL&&p->id!=cla1.id)||p->id>cla1.id)
    {
    printf("\n查无此生!信息没有插入!");
    }
    else
    {
    p1=(struct cla
    )p->cla;
    p3=(struct cla*)p->cla;
    while(p1!=NULL) //p3为前一个指针 p1为当前地址
    {
    if(strcmp(p1->name,cla1.name)==0) break;
    p3=p1; p1=p1->next;

        }
        if(p1!=NULL&&strcmp(p1->name,cla1.name)==0)
        {
             p1->e_score=cla1.e_score;
             p1->n_score=cla1.n_score;
             p1->t_score=cla1.t_score;
        }
        else
        {
            p2=(struct cla*)malloc(sizeof(struct cla));
            p2->id=cla1.id;
            strcpy(p2->name,cla1.name);
            strcpy(p2->stu_name,p->name);
            p2->e_score=cla1.e_score;
            p2->n_score=cla1.n_score;
            p2->t_score=cla1.t_score;
            p2->next=NULL;
            p2->res=NULL;
            if(p3==NULL) p->cla=p2;
            else p3->next=p2;
            // to make a follow
            if(in2.num==0)
            {
                headc=p2;
                clap=p2;
                p2->follow=NULL;
                in2.num++;
            }
            else
            {
                clap->follow=p2;
                clap=p2;
                p2->follow=NULL;
                in2.num++;
            }
        }
        return p2;
    }
    return NULL;
    

    }

    void insert_cla2(struct cla cp)//将课程插入教师
    {
    struct cla *p1,*p2,*p3;
    struct tec *p;
    p=(struct tec *)head_tec;
    while(strcmp(p->cla_name,cp->name)!=0&&p->next!=NULL)
    {
    p=p->next;
    }
    if(p->next==NULL&&strcmp(p->cla_name,cp->name)!=0)
    {
    printf("\n信息没有插入!");
    }
    else
    {
    p1=(struct cla
    )p->cla;
    p3=(struct cla*)p->cla;
    while(p1!=NULL)
    {
    if(p1->id==cp->id) break;
    p3=p1;
    p1=p1->tec;
    }
    if(p1!=NULL&&p1->id==cp->id)
    {
    p1->e_score=cp->e_score;
    p1->n_score=cp->n_score;
    p1->t_score=cp->t_score;
    }
    else
    {
    p2=cp;
    p2->tec=NULL;
    p2->score=p->score;
    if(p3==NULL) p->cla=p2;
    else p3->tec=p2;
    }

    }
    

    }

    void insert_res(struct res res1)//插入重修
    {
    struct stu p;
    struct res *p1,*p2,*p4;
    struct cla *p3;
    p=(struct stu *)head;
    while(p->id!=res1.id&&p->next!=NULL&&p->id {
    p=p->next;
    }
    if((p->next==NULL&&p->id!=res1.id)||p->id>res1.id)
    {
    printf("\n查无此生!信息没有插入!");
    }
    else
    {
    p3=(struct cla
    )p->cla;
    if(p3==NULL)
    {
    printf("\n该生尚无课程信息!");
    }
    else
    {
    while(strcmp(p3->name,res1.name)!=0&&p3->next!=NULL)
    {
    p3=p3->next;
    }
    if(p3->next==NULL&&strcmp(p3->name,res1.name)!=0)
    {
    printf("\n该课程不存在!");
    }
    else
    {
    p1=(struct res )p3->res;
    p4=(struct res *)p3->res;
    while(p1!=NULL)
    {
    if(p1->times==res1.times) break;
    p4=p1;
    p1=p1->next;
    }
    if(p1!=NULL&&p1->times==res1.times)
    {
    p1->score=res1.score;
    }
    else
    {
    p2=(struct res
    )malloc(sizeof(struct res));
    p2->id=res1.id;
    strcpy(p2->name,res1.name);
    p2->score=res1.score;
    p2->semester=res1.semester;
    p2->times=res1.times;
    p2->next=NULL;
    if(p4==NULL) p3->res=p2;
    else p4->next=p2;
    // to make a follow
    if(in3.num==0)
    {
    headr=p2;
    resp=p2;
    p2->follow=NULL;
    in3.num++;
    }
    else
    {
    resp->follow=p2;
    resp=p2;
    p2->follow=NULL;
    in3.num++;
    }
    }
    }
    }
    }
    }

    void input_stu() //学生录入
    {
    struct stu stu1;
    printf("\n请输入学生数据,输入0结束输入.");
    printf("\n请输入学生ID(8位数字):");
    scanf("%d",&stu1.id);
    while(stu1.id!=0)
    {
    //initialize and create
    printf("\n请输入学生姓名:");scanf("%s",stu1.name);
    printf("\n请输入学生宿舍(五位数字比如08207):");scanf("%d",&stu1.dor);
    printf("\n请输入学生班级(2位数字比如01):");scanf("%d",&stu1.clas);
    printf("\n请输入学生性别(男或女):");scanf("%s",stu1.sex);
    printf("\n请输入学生年龄:");scanf("%d",&stu1.age);
    printf("\n请输入学生电话号码(11位手机号码):");scanf("%s",stu1.phone);
    printf("\n请输入学生密码:");scanf("%s",stu1.key);
    stu1.next=NULL;stu1.cla=NULL;
    insert_stu(stu1);
    printf("\n请输入学生ID(8位数字):");scanf("%d",&stu1.id);
    }
    }

    void input_tec() //教师录入
    {
    struct tec tec1;
    printf("\n请输入教师数据,输入0结束输入.");
    printf("\n请输入教师ID(8位数字):");scanf("%d",&tec1.id);
    while(tec1.id!=0)
    {
    //initialize and create
    printf("\n请输入教师姓名:");scanf("%s",tec1.name);
    printf("\n请输入教师课程名称:");scanf("%s",tec1.cla_name);
    printf("\n请输入教师课程编号:");scanf("%d",&tec1.cla_id);
    printf("\n请输入教师性别(男或女):");scanf("%s",tec1.sex);
    printf("\n请输入教师电话号码(11位手机号码):");scanf("%s",tec1.phone);
    printf("\n请输入教师密码:");scanf("%s",tec1.key);
    printf("\n请输入学分:");scanf("%d",&tec1.score);
    printf("\n请输入教师email:");scanf("%s",tec1.email);
    tec1.next=NULL;tec1.cla=NULL;
    insert_tec(tec1);
    printf("\n请输入教师ID(8位数字):");scanf("%d",&tec1.id);
    }
    }

    void input_cla() //课程录入
    {
    struct cla cla1;
    struct cla *cp;
    printf("\n请输入学生课程数据,输入0结束输入.");
    printf("\n请输入学生ID(8位数字):");scanf("%d",&cla1.id);
    while(cla1.id!=0)
    {
    //initialize and create
    printf("\n请输入课程姓名:");scanf("%s",cla1.name);
    cla1.score=0;
    printf("\n请输入课程学生考试成绩:");scanf("%f",&cla1.e_score);
    printf("\n请输入课程学生平时成绩:");scanf("%f",&cla1.n_score);
    cla1.t_score=0.5*cla1.n_score+0.5*cla1.e_score;
    cla1.next=NULL;cla1.res=NULL; cla1.follow=NULL;
    cp=insert_cla1(cla1);
    insert_cla2(cp);
    printf("\n请输入学生ID(8位数字):");scanf("%d",&cla1.id);
    }
    }

    void input_res() //重修录入
    {
    struct res res1;
    printf("\n请输入学生重修数据,输入0结束输入.");
    printf("\n请输入学生ID(8位数字):");scanf("%d",&res1.id);
    while(res1.id!=0)
    {
    //initialize and create
    printf("\n请输入重修学期:");scanf("%d",&res1.semester);
    printf("\n请输入重修课程名称:");scanf("%s",res1.name);
    printf("\n请输入重修成绩:");scanf("%f",&res1.score);
    printf("\n请输入重修次数:");scanf("%d",&res1.times);
    res1.next=NULL;
    // res1->next=NULL;
    insert_res(res1);
    printf("\n请输入学生ID(8位数字):");scanf("%d",&res1.id);
    }
    }

    void copy_stu(struct stu *p1,struct stu stu1)// 用于复制 减少代码量
    {
    p1->age=stu1.age; p1->id=stu1.id;
    p1->dor=stu1.dor;
    strcpy(p1->phone,stu1.phone);
    strcpy(p1->sex,stu1.sex);
    strcpy(p1->key,stu1.key);
    strcpy(p1->name,stu1.name);
    p1->score=0;
    }

    void copy_tec(struct tec *p1,struct tec tec1)// 用于复制 减少代码量
    {
    strcpy(p1->email,tec1.email);
    strcpy(p1->cla_name,tec1.cla_name);
    p1->cla_id=tec1.cla_id;
    strcpy(p1->phone,tec1.phone);
    strcpy(p1->sex,tec1.sex);
    p1->score=tec1.score;
    strcpy(p1->key,tec1.key);
    strcpy(p1->name,tec1.name);
    }

    void modify_stu(struct stu p1)// 学生修改自己信息
    {
    int z;
    system("cls");
    printf("\n\t\t\t
    *************************");
    printf("\n\t\t\t**\t修改项目\t**");
    printf("\n\t\t\t**************************");
    printf("\n\t\t\t**\t(1)年龄 \t**");
    printf("\n\t\t\t**\t(2)宿舍 \t**");
    printf("\n\t\t\t**\t(3)电话号码\t**");
    printf("\n\t\t\t**************************");
    printf("\n请输入数字(输入0停止修改):");
    scanf("%d",&z);
    switch(z)
    {
    case 0: break;
    case 1: printf("请输入年龄:");scanf("%d",&p1->age); fflush(stdin);break;
    case 2: printf("请输入宿舍号码:");scanf("%d",&p1->dor); fflush(stdin);break;
    case 3: printf("请输入电话号码:");scanf("%s",p1->phone); fflush(stdin);break;
    default : printf("\n请正确输入相应数字。");fflush(stdin);break;
    }
    printf("\n已完成修改。按任意键返回。"); getchar(); getchar();

    }

    void modify_tec(struct tec *p1)// 教师修改自己信息
    {

        int z;
        system("cls");
        printf("\n\t\t\t**************************");
        printf("\n\t\t\t**\t修改项目\t**");
        printf("\n\t\t\t**************************");
        printf("\n\t\t\t**\t(1)学分 \t**");
        printf("\n\t\t\t**\t(2)email\t**");
        printf("\n\t\t\t**\t(3)电话号码\t**");
        printf("\n\t\t\t**************************");
        printf("\n请输入数字(输入0停止修改):");
        scanf("%d",&z);
            switch(z)
            {
                case 0: break;
                case 1: printf("\n请输入新的学分:"); scanf("%d",&p1->score); fflush(stdin);break;
                case 2: printf("\n请输入新的email:"); scanf("%s",p1->email); fflush(stdin);break;
                case 3: printf("\n请输入新的电话:"); scanf("%s",p1->phone); fflush(stdin);break;
                default :  printf("\n请正确输入数字。");fflush(stdin);break;
            }
         printf("\n已完成修改。按任意键返回。"); getchar(); getchar();
    

    }

    void modify_stu_adm()//管理员进入某一学生系统 修改学生信息 如密码
    {
    struct stu *p1;
    int id;
    int z=0;
    p1=head;
    system("cls");
    printf("\n你好,请输入要修改学生的ID(8位id,输入0停止输入):");
    scanf("%d",&id); fflush(stdin);
    while(p1!=NULL)
    {
    if(p1->id>=id) break; //减少检索次数
    p1=p1->next;
    }
    if(p1!=NULL)
    {
    if(p1->id==id) stu_ui(p1);
    }
    else
    printf("\n学生不存在。");

    }

    void modify_tec_adm()//管理员进入某一教师系统 修改教师信息 如密码
    {
    struct tec *p1;
    int id;
    int z=0;
    system("cls");
    p1=head_tec;
    printf("\n你好,请输入要修改教师的ID(8位id,输入0停止输入):");
    scanf("%d",&id);
    while(p1!=NULL)
    {
    if(p1->id>=id) break;
    p1=p1->next;
    }
    if(p1!=NULL)
    {
    if(p1->id==id) tec_ui(p1);
    }
    else
    printf("该教师不存在。");
    }

    void del_stu()//删除学生信息
    {
    struct stu *p1,*p11;
    struct cla *p2,*p21,*p22;
    struct tec *p3;
    int id;
    system("cls");
    printf("\n请输入要删除学生的ID(8位学号,输入0为停止删除):");
    scanf("%d",&id);fflush(stdin);
    while(id!=0)
    {
    p1=head;
    while(p1!=NULL)
    {
    if(p1->id==id) break;
    p1=p1->next;
    }
    if(p1!=NULL)
    {
    p2=p1->cla;
    while(p2!=NULL)
    {
    p3=head_tec;
    while(p3!=NULL)
    {
    p21=p3->cla;
    if(strcmp(p3->cla_name,p2->name)==0)
    {
    while(p21!=NULL)
    {
    if(p21->id==p2->id) break;
    p21=p21->tec;
    }
    }
    if(p21!=NULL&&p21->id==p2->id) break;
    p3=p3->next;
    }
    p22=p2->next;
    if(p3!=NULL)
    {
    pfree_cla(p1,p3,(*p2));
    }
    p2=p22;
    }
    printf("\n成功删除该生信息.");
    }
    p1=p11=head;
    while(p1!=NULL) //释放stu内存
    {
    if(p1->id==id)
    {
    if(p1==p11) head=p1->next;
    else
    p11->next=p1->next;
    free(p1);
    in1.num--;
    break;
    }
    p11=p1; p1=p1->next;
    }
    printf("\n请输入要删除学生的ID(8位学号,输入0为停止删除):");
    scanf("%d",&id);
    }

    }

    void del_tec()//删除教师信息
    {
    struct tec *p1,*p11;
    struct cla *p2,*p21;
    struct stu *p3;
    int id;
    system("cls");
    printf("\n请输入要删除教师的ID(8位学号,输入0为停止删除):");
    scanf("%d",&id);fflush(stdin);
    while(id!=0)
    {
    p1=head_tec;
    while(p1!=NULL)
    {
    if(p1->id==id) break;
    p1=p1->next;
    }
    if(p1!=NULL)
    {
    p2=p1->cla;
    while(p2!=NULL)
    {
    p3=head;
    while(p3!=NULL)
    {
    if(p3->id==p2->id) break;
    p3=p3->next;
    }
    p21=p2->tec;
    if(p3!=NULL)
    {
    pfree_cla(p3,p1,(*p2));
    }
    p2=p21;
    }
    }
    p1=p11=head_tec;
    while(p1!=NULL)
    {
    if(p1->id==id)
    {
    if(p1==p11) head_tec=p1->next;
    else p11->next=p1->next;
    free(p1);
    in4.num--;
    break;
    }
    p11=p1; p1=p1->next;
    }
    printf("\n请输入要删除教师的ID(8位学号,输入0为停止删除):");
    scanf("%d",&id);
    }

    }

    void del_res()//删除重修信息
    {
    struct res res1;
    struct cla *p;
    system("cls");
    printf("please input the id of stu");
    scanf("%d",&res1.id);fflush(stdin);
    printf("please input the name of course");
    scanf("%s",res1.name);fflush(stdin);
    printf("please input the times of res");
    scanf("%d",&res1.times);fflush(stdin);
    while(res1.id!=0)
    {
    p=headc;
    while(p!=NULL)
    {
    if(strcmp(res1.name,p->name)==0&&p->id==res1.id)
    {
    pfree_res(p,res1);
    break;
    }
    p=p->follow;
    }
    printf("请输入学生id");
    scanf("%d",&res1.id);
    printf("输入课程名称");
    scanf("%s",res1.name);
    printf("输入重修次数");
    scanf("%d",&res1.times);
    }

    }

    void pfree_cla(struct stu *p_stu,struct tec *p_tec,struct cla cla1)//解锁及释放课程内存
    {
    struct cla *p2,*p21;
    struct res *p3,*p31;
    p2=p21=p_stu->cla;
    while(p2!=NULL)
    {
    if(strcmp(p2->name,cla1.name)==0)
    {
    p3=p2->res; // unlock res
    while(p3!=NULL)
    {
    p31=p3->next;
    pfree_res(p2,(*p3));
    p3=p31;
    }

             if(p2==p21)
             {
                 p_stu->cla=p2->next;
             }
             else
             {
                 p21->next=p2->next;
             }
             break;
         }
         p21=p2; p2=p2->next;
     }
     p2=p21=p_tec->cla;
     while(p2!=NULL)
     {
         if(p2->id==cla1.id)
         {
             if(p2==p21)
             {
                 p_tec->cla=p2->tec;
             }
             else
             {
                 p21->tec=p2->tec;
             }
             break;
         }
         p21=p2;  p2=p2->tec;
     }
     p2=p21=headc;
     while(p2!=NULL)
     {
         if(p2->id==cla1.id&&strcmp(p2->name,cla1.name)==0)
         {
             if(p2=p21)
             {
                 headc=p2->follow;
             }
             else
             {
                 p21->follow=p2->follow;
    
             }
             free(p2);
             in2.num--;
             break;
         }
         p21=p2; p2=p2->follow;
     }
    

    }

    void pfree_res(struct cla *p,struct res res1)//解锁及释放重修内存
    {
    struct res *p2,*p21;
    p2=p21=p->res;
    while(p2!=NULL)
    {
    if(p2->times==res1.times)
    {
    if(p2==p21)
    {
    p->res=p2->next;
    }
    else
    {
    p21->next=p2->next;
    }
    break;
    }
    p21=p2; p2=p2->next;
    }
    p2=p21=headr;
    while(p2!=NULL)
    {
    if(p2->times==res1.times&&p2->id==res1.id&&strcmp(p2->name,res1.name)==0)
    {
    if(p2==p21)
    {
    headr=p2->follow;
    }
    else
    {
    p21->follow=p2->follow;
    }
    free(p2);
    in3.num--;
    break;
    }
    p21=p2;p2=p2->next;
    }
    }

    void skim_stu(struct stu *head) //按ID或名字查看学生信息
    {
    char id[9];
    int id1;
    struct stu *p1;
    system("cls");
    if(head==NULL)
    {
    printf("\n目前无学生数据,请返回录入.\n");
    }
    else
    {
    printf("\n请输入要查询的学生ID或姓名(8位数字或者汉字,输入0停止查询):");
    scanf("%s",&id);
    while(id[0]!='0')
    {
    p1=(struct stu *)head;
    if(strlen(id)==8)
    {
    id1=idc(id);
    while(p1->id!=id1&&p1->next!=NULL&&p1->id {
    p1=p1->next;
    }
    if((p1->next==NULL&&p1->id!=id1)||p1->id>id1)
    {
    printf("\n查无此生!请重新输入学生ID(8位数字,输入0停止查询):");
    scanf("%s",id);
    }
    else
    {
    print_stu(p1);
    printf("\n继续查询请再次输入学生ID或姓名(8位数字或者汉字,输入0停止查询):");
    scanf("%s",id);
    }
    }
    else
    {
    while(strcmp(id,p1->name)!=0&&p1!=NULL)
    {
    p1=p1->next;
    }
    if(strcmp(id,p1->name)==0)
    {
    print_stu(p1);
    printf("\n继续查询请再次输入学生ID或姓名(8位数字或者汉字,输入0停止查询):");
    scanf("%s",id);
    }
    else
    {
    printf("\n查无此生!请重新输入学生ID(8位数字,输入0停止查询):");
    scanf("%s",id);
    }
    }

        }
    }
    

    }

    void skim_tec(struct tec *head)//按id或名字查看教师
    {
    int id1;
    char id[9];
    struct tec *p1;
    system("cls");
    if(head==NULL)
    {
    printf("\n目前无教师数据,请返回录入.\n");
    }
    printf("\n请输入要查询的教师ID或名字(8位数字或汉字,输入0停止查询):");
    scanf("%s",id);
    while(id[0]!='0')
    {
    p1=(struct tec *)head;
    if(strlen(id)==8)
    {
    id1=idc(id);
    while(p1->id!=id1&&p1->next!=NULL&&p1->id {
    p1=p1->next;
    }
    if(id1=p1->id)
    {
    printf("\n------------------------------------------------------------");
    printf("\n名字>>>性别>课程名称>>>>>>课程编号>>>学分>>>手机号码>>>>>>>>email>>>>>>>");
    printf("\n------------------------------------------------------------");
    printf("\n%s %s %s %d %d %s %s",p1->name,p1->sex,p1->cla_name,p1->cla_id,p1->score,p1->phone,p1->email);
    printf("\n继续查询请再次输入教师ID或名字(8位数字或汉字,输入0停止查询):");
    scanf("%s",id);
    }
    else
    {
    printf("\nno data!请重新输入教师ID或名字(8位数字或汉字,输入0停止查询):");
    scanf("%s",id);
    }
    }
    else
    {
    while(strcmp(id,p1->name)!=0&&p1!=NULL)
    {
    p1=p1->next;
    }
    if(strcmp(id,p1->name)==0)
    {
    printf("\n------------------------------------------------------------");
    printf("\n名字>>>性别>课程名称>>>>>>课程名称>>>学分>>>手机号码>>>>>>>>email>>>>>>>");
    printf("\n------------------------------------------------------------");
    printf("\n%s %s %s %d %d %s %s",p1->name,p1->sex,p1->cla_name,p1->cla_id,p1->score,p1->phone,p1->email);
    printf("\n继续查询请再次输入教师ID或名字(8位数字或汉字,输入0停止查询):");
    scanf("%s",id);
    }
    else
    {
    printf("\nno data!请重新输入教师ID或名字(8位数字或汉字,输入0停止查询):");
    scanf("%s",id);
    }
    }

    }
    
    getchar(); getchar();
    

    }

    void skim_stu_all()//查看所有学生学分及不及格课程
    {
    struct stu *p1;
    struct cla *p2;
    system("cls");
    p1=head;
    printf("\n-----------------------------------------------------------------------");
    printf("\nID>>>>>>>>>学生姓名>>>>>>>学分>>不及格课程>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
    printf("\n-----------------------------------------------------------------------");
    while(p1!=NULL)
    {
    p1->score=score_stu(p1);
    printf("\n%d %s \t %d",p1->id,p1->name,p1->score);
    p2=p1->cla;
    while(p2!=NULL)
    {

            if(p2->e_score<60&&p2->e_score!=0)
                printf(" %s  ",p2->name);
            p2=p2->next;
        }
        p1=p1->next;
    }
    getchar(); getchar();
    

    }

    void skim_tec_all()//查看所有教师
    {
    struct tec *p1;
    system("cls");
    p1=head_tec;
    printf("\n-------------------------------------------------------------------");
    printf("\n教师姓名>>>>>>>>>课程名称>>>>>>>>课程编号>>>>>>>>>>>>>>>>>>>>>>>>>>>");
    printf("\n-------------------------------------------------------------------");
    while(p1!=NULL)
    {
    printf("\n%-10s \t %-10s \t %-10d",p1->name,p1->cla_name,p1->cla_id);
    p1=p1->next;
    }

    getchar(); getchar();
    

    }

    void skim_stu_course() // 根据课程查看学生 管理员功能
    {
    struct tec *p;
    struct cla *p1;
    struct res *p2;
    int coursenumber;
    char course[12];
    int z=0;
    p=head_tec;
    system("cls");
    printf("\n请输入课程编号+课程名称:"); // 课程名与教师一一对应
    scanf("%d%s",&coursenumber,course);fflush(stdin);
    while(p!=NULL)
    {
    if(p->cla_id==coursenumber)
    {
    p1=p->cla;
    printf("\n---------------------------------------------------------------------");
    printf("\n学生ID>>学生姓名>>考试成绩>>>>平时成绩>>>>综合成绩>>>>重修成绩>>>>>>>>>>>>>");
    printf("\n---------------------------------------------------------------------");
    while(p1!=NULL)
    {
    if(p->cla_id==coursenumber) //输出所有选同一课程的学生
    {
    printf("\n%d \t %s %.2f \t %.2f \t %.2f \t",p1->id,p1->stu_name,p1->e_score,p1->n_score,p1->t_score);
    if(p1->res!=NULL)
    {
    p2=p1->res;
    z=1;
    while(p2!=NULL)
    {
    printf("(%d)%.2f ",z++,p2->score);
    p2=p2->next;
    }
    }
    else
    printf("无重修");
    z=1; //用来判断有无学生输出
    }
    p1=p1->tec;
    }

        }
        p=p->next;
    }
    if(z==0)
    {printf("\n无该课程信息");}
    getchar(); getchar();
    

    }

    void skim_stu_class() // 根据班级查看学生 管理员功能
    {
    struct stu *p1;
    struct cla *p2;
    int id1,id2;
    int n=0;
    p1=head;
    system("cls");
    printf("\n请输入班级编号(学号后四位如0526):");
    scanf("%d",&id1);fflush(stdin);
    id1=(int)(id1/100);
    id1=id1*100+20160000; id2=id1+100; //取学号范围确定班级
    printf("\n-------------------------------------------------------------------");
    printf("\n学生姓名>>>所选课程(考试成绩)>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
    printf("\n-------------------------------------------------------------------");
    while(p1!=NULL)
    {
    if(p1->idid>id1) //寻找同一班级的同学
    {
    printf("\n%s\t",p1->name);
    p2=p1->cla;
    while(p2!=NULL)
    {
    printf(" %s(%.2f)",p2->name,p2->e_score);
    p2=p2->next;
    }
    n=1; // 有班级存在 n作为判断数
    }
    p1=p1->next;
    }
    if(n==0)
    printf("\n无该班级信息");
    getchar(); getchar();

    }

    void skim_list_stu(struct tec * p) //教师查看所有选自己课的学生
    {
    struct cla *p3;
    struct order *p11,*p1,*head;
    struct res *p2;
    int z;
    p1=list(p->cla);
    head=p1;
    system("cls");
    while(p1!=NULL)
    {
    p3=p1->pointer;
    printf("\n---------------------------------------------------------------------");
    printf("\n学生ID>>学生姓名>>考试成绩>>平时成绩>>综合成绩>>>>重修成绩>>>>>>>>>>>>>");
    printf("\n---------------------------------------------------------------------");
    printf("\n%d %s %.2f \t %.2f \t %.2f \t",p3->id,p3->stu_name,p3->e_score,p3->n_score,p3->t_score);
    if(p3->res!=NULL)
    {
    p2=p3->res;
    z=1;
    while(p2!=NULL)
    {
    printf("(%d)%.2f ",z++,p2->score);
    p2=p2->next;
    }
    }

        else
        printf("无重修");
    
       p1=p1->next;
    

    }
    p1=head;
    while(p1!=NULL)
    {
    p11=p1;
    p1=p1->next;
    free(p11);
    }
    getchar(); getchar();

    }

    struct order * list(struct cla head)// 学生分数排序 返回链表头 to make a list of stu
    {
    struct order *p1=NULL,*p2,*p3,*p4;
    struct cla *p;
    p=head;
    while(p!=NULL)
    {
    if(p1==NULL)//the head
    {
    p2=(struct order
    )malloc(sizeof(struct order));
    p2->pointer=p;
    p2->next=NULL;
    p1=p2;
    }
    else
    {
    if(p->e_score>p1->pointer->e_score)
    {
    p2=(struct order*)malloc(sizeof(struct order));
    p2->pointer=p;
    p2->next=p1;
    p1=p2;
    }
    else
    {
    p3=p1;
    while(p3!=NULL)
    {
    if(p->e_score>p3->pointer->e_score) break;
    p4=p3; p3=p3->next;
    }
    p2=(struct order*)malloc(sizeof(struct order));
    p2->pointer=p;
    if(p3==NULL) p2->next=NULL;
    else p2->next=p3;
    p4->next=p2;

          }
       }
       p=p->tec;
    }
    return p1;
    

    }

    void print_stu(struct stu* p1) //输出学生
    {
    struct cla p2;
    struct res *p3;
    printf("\n------------------------------------------------------------");
    printf("\nID\t>>名字>>>性别>年龄>宿舍>>>>手机号码>>>>>>>>>");
    printf("\n------------------------------------------------------------");
    printf("\n%d %s %s %d %d %s",p1->id,p1->name,p1->sex,p1->age,p1->dor,p1->phone);
    if(p1->cla==NULL)
    {
    printf("\n暂无选课信息!");
    }
    else
    {
    p2=(struct cla
    )p1->cla;
    printf("\n------------------------------------------------------------");
    printf("\n课程名称>>>学分>>考试成绩>>平时成绩>>综合成绩>>>>");
    printf("\n------------------------------------------------------------");
    while(p2!=NULL)
    {
    printf("\n%-12s %d %.2f %.2f %.2f ",p2->name,p2->score,p2->e_score,p2->n_score,p2->t_score);
    if(p2->e_score {
    p2->t_score=p2->e_score;
    }
    else p2->t_score=(p2->e_score+p2->n_score)*0.5;
    if(p2->res==NULL)
    {
    printf("该课程无重修.");
    }
    else
    {
    p3=(struct res *)p2->res;
    while(p3!=NULL)
    {
    printf("\n------------------------------------------------------------");
    printf("\n重修学期>>>分数>>重修次数>>>>");
    printf("\n------------------------------------------------------------");
    printf("\n%d %.2f %d",p3->semester,p3->score,p3->times);
    p3=p3->next;
    }

                    }
                    p2=p2->next;
                }
    
            }
            getchar();getchar();
    

    }

    struct info2 Rfile2(struct info2 *head_note)
    {
    FILE *fr,*fw;
    char note[500];
    char name[20];
    char reply[500];
    char ch;
    int i,replied=0;
    struct info2 *p2,*p1;
    fr=fopen("note.txt","r");
    if(fr==NULL)
    {
    fw=fopen("note.txt","w");
    fr=fopen("note.txt","r");
    }
    while((ch=fgetc(fr))!=EOF)
    {
    fseek(fr,-1,SEEK_CUR);
    p1=(struct info2
    )malloc(sizeof(struct info2));
    fscanf(fr,"%d%s%s\n",&i,name,note);
    p1->i=i;
    strcpy(p1->name,name);
    strcpy(p1->note,note);
    p1->next=NULL;
    if(head_note==NULL) head_note=p1;
    else p2->next=p1;
    p2=p1;
    }
    return head_note;

    }

    void Savenote(struct info2 *head_note)
    {
    struct info2 *sp1=head_note;
    FILE *fps;
    fps=fopen("note.txt","w");
    if(fps==NULL)
    printf("\t\t\t\t\n保存失败!\n");
    while(sp1)
    {
    fprintf(fps,"%d %s %s\n",sp1->i,sp1->name,sp1->note);
    sp1=sp1->next;
    }
    printf("\t\t\t\t\n保存成功!\n\n");

    }

    struct info2 *First2(struct info2 *head_note)
    {

    struct info2 *p;
    char name[20]; //使用者名称
    char note[500]; //用途
    printf(" \t\t\t\t请输入你的姓名:\n");
    scanf("%s",name);
    printf(" \t\t\t\t请输入你的留言:\n");
    scanf("%s",note);
    p=(struct info2*)malloc(sizeof(struct info2));
    strcpy(p->name,name);
    p->i=1;
    strcpy(p->note,note);
    p->next=NULL;
    head_note=p;
    Savenote(head_note);
    return head_note;
    

    }

    void watchall(struct info2 *head_note)
    {
    struct info2 *np1=head_note;
    if(np1==NULL)
    {
    printf(" \n\t\t\t\t没有留言信息!\n");
    }
    while(np1)
    {
    printf(" \n \t\t\t\t[%d] %s: %s\n\n",np1->i,np1->name,np1->note);
    np1=np1->next;
    }
    printf(" \n \t\t\t\t以上是全部留言!\n");
    }

    struct info2 leavenote(struct info2 *head_note)
    {
    struct info2 *p,*p1,*p2;
    char note[500];
    char name[20];
    int i=1;
    p2=head_note;
    while(p2)
    {
    p1=p2;
    p2=p2->next;
    i++;
    }
    printf("\n\t\t\t\t请输入你的姓名:");
    scanf("%s",name);
    printf("\n\t\t\t\t请输入你的留言:");
    scanf("%s",note);
    p=(struct info2
    )malloc(sizeof(struct info2));
    p->i=i;
    strcpy(p->note,note);
    strcpy(p->name,name);
    p1->next=p;
    p->next=NULL;
    Savenote(head_note);
    }

    struct info2 *notesys(struct info2 *head_note)
    {
    int flag=1;
    struct info2 *np1;
    np1=head_note;
    int choice=0;
    system("cls");
    while(flag)
    {
    printf("\t\t\t\t ┏━━━━━━━━┳━━━━━━━━┓\n");
    printf("\t\t\t\t ┃[1]查看全部信息 ┃[2]留言 ┃\n");
    printf("\t\t\t\t ┣━━━━━━━━╋━━━━━━━━┫\n");
    printf("\t\t\t\t ┃ [0]退出留言系统 ┃\n");
    printf("\t\t\t\t ┗━━━━━━━━┻━━━━━━━━┛\n\n");
    printf("\t\t\t\t 请输入操作编号:");
    scanf("%d",&choice);
    switch(choice)
    {

        case 1:
            watchall(head_note);
            break;
        case 2:
            {
            if(head_note==NULL)
                    head_note=First2(head_note);
            else
            leavenote(head_note);
            break;
            }
        case 0:
            flag=0;
            break;
        default:
            printf("\n\t\t\t\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
            printf("\n\t\t\t\t┃请输入正确编号!┃\n");
            printf("\n\t\t\t\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
            break;
        }
    }
    

    }

    void stu_ui(struct stu *p)//学生界面
    {
    int z;
    system("cls");
    struct info2 *head_note=NULL;
    head_note=Rfile2(head_note);
    do
    {

        printf("\n\t\t\t--------------------------------\n");
        printf("\t\t\t+        %s,欢迎你          |\n",p->name);
        printf("\t\t\t--------------------------------\n");
        printf("\t\t\t+    [1]----修改个人信息       |\n");
        printf("\t\t\t+    [2]----选 课              |\n");
        printf("\t\t\t+    [3]----查询课程信息       |\n");
        printf("\t\t\t+    [4]----修改密码           |\n");
        printf("\t\t\t+    [5]----留言               |\n");
        printf("\t\t\t+    [0]----返回主界面         |\n");
        printf("\t\t\t--------------------------------\n");
        printf("请输入您的选择:");
        scanf("%d", &z);
        switch(z)
        {
        case 0 :break;
        case 1 :modify_stu(p);break;
        case 2 :select_s(p);break;
        case 3 :print_stu(p);break;
        case 4 :st_key_stu(p);break;
        case 5 :notesys(head_note);break;
        default:printf("\n无效选项!");
        }
     }while(z!=0);
    

    }

    void tec_ui(struct tec *p)//教师界面
    {
    int z;
    system("cls");
    do
    {
    printf("\n\t\t\t--------------------------------\n");
    printf("\t\t\t+ %s,欢迎您。 |\n",p->name);
    printf("\t\t\t--------------------------------\n");
    printf("\t\t\t+ [1]----修改个人信息 |\n");
    printf("\t\t\t+ [2]----登记学生分数 |\n");
    printf("\t\t\t+ [3]----查看所有学生 |\n");
    printf("\t\t\t+ [4]----按学号查看学生 |\n");
    printf("\t\t\t+ [5]----修改密码 |\n");
    printf("\t\t\t+ [0]----返回主界面 |\n");
    printf("\t\t\t--------------------------------\n");
    printf("请输入您的选择:");
    scanf("%d", &z);
    switch(z)
    {
    case 0 : break;
    case 1 :modify_tec(p);break;
    case 2 :tec_score(p);break;
    case 3 :skim_list_stu(p);break;
    case 4 :stu_score(p); break;
    case 5 :st_key_tec(p); break;
    default:printf("\n无效选项!");
    }
    }while(z!=0);
    }

    void adm_ui_1()//管理员界面1
    {
    int z;
    system("cls");
    do
    {
    printf("\n\t\t\t--------------------------------\n");
    printf("\t\t\t+ 管理员 |\n");
    printf("\t\t\t--------------------------------\n");
    printf("\t\t\t+ [1]----录入学生信息 |\n");
    printf("\t\t\t+ [2]----录入教师信息 |\n");
    printf("\t\t\t+ [3]----录入选课信息 |\n");
    printf("\t\t\t+ [4]----录入重修信息 |\n");
    printf("\t\t\t+ [5]----查询学生信息 |\n");
    printf("\t\t\t+ [6]----查询教师信息 |\n");
    printf("\t\t\t+ [7]----删除学生信息 |\n");
    printf("\t\t\t+ [8]----删除教师信息 |\n");
    printf("\t\t\t+ [9]----下一页 |\n");
    printf("\t\t\t+ [0]----退出系统 |\n");
    printf("\t\t\t--------------------------------\n");
    printf("请输入您的选择:");
    scanf("%d", &z);
    switch(z)
    {
    case 0 : break;
    case 1 :input_stu();break;
    case 2 :input_tec();break;
    case 3 :input_cla();break;
    case 4 :input_res(); break;
    case 5 :skim_stu(head); break;
    case 6 :skim_tec(head_tec); break;
    case 7 :del_stu(); break;
    case 8 :del_tec();break;
    case 9 :adm_ui_2();break;
    default:printf("\n无效选项!");
    }
    }
    while(z!=0);
    }

    void adm_ui_2()//管理员界面2
    {
    int z;
    system("cls");
    do
    {
    printf("\n\t\t\t--------------------------------\n");
    printf("\t\t\t+ 管理员 |\n");
    printf("\t\t\t--------------------------------\n");
    printf("\t\t\t+ [1]----删除重修信息 |\n");
    printf("\t\t\t+ [2]----修改学生信息 |\n");
    printf("\t\t\t+ [3]----修改教师信息 |\n");
    printf("\t\t\t+ [4]----按课程查看学生 |\n");
    printf("\t\t\t+ [5]----按班统计学生 |\n");
    printf("\t\t\t+ [6]----统计所有学生信息 |\n");
    printf("\t\t\t+ [7]----统计所有教师信息 |\n");
    printf("\t\t\t+ [8]----管理员密码修改 |\n");
    printf("\t\t\t+ [0]---- 上一页 |\n");
    printf("\t\t\t--------------------------------\n");
    printf("请输入您的选择:");
    scanf("%d", &z);
    switch(z)
    {
    case 0 : break;
    case 1 :del_res();break;
    case 2 :modify_stu_adm(); break;
    case 3 :modify_tec_adm(); break;
    case 4 :skim_stu_course(); break;
    case 5 :skim_stu_class(); break;
    case 6 :skim_stu_all(); break;
    case 7 :skim_tec_all();break;
    case 8 :adm_key();break;
    default:printf("\n无效选项!");
    }
    }
    while(z!=0);
    }

    void key_stu()//学生ID与密码验证
    {
    int z=0;
    z<=2;
    char key1[11];
    int id;
    struct stu p;
    do
    {
    printf("\n\t\t\t|&|
    ************学生登录*************|&|");
    printf("\n\t\t\t|&|----------------------------------|&|");
    printf("\n\t\t\t|&| .--. |&|");
    printf("\n\t\t\t|&| /.-. '--------------. |&|");
    printf("\n\t\t\t|&| \'-' .--''--'' -''-' |&|");
    printf("\n\t\t\t|&| '--' |&|");
    printf("\n\t\t\t|&|----------------------------------|&|");
    printf("\n请输入学生ID(8位数字):");
    scanf("%d",&id); fflush(stdin);
    printf("\n请输入密码(10位以内):");
    key(key1);fflush(stdin);
    p=head;
    while(p!=NULL)
    {
    if(p->id>=id) break;
    p=p->next;
    }
    if(p!=NULL)
    {
    if(strcmp(p->key,key1)==0)
    {
    stu_ui(p); break;
    }
    else
    {
    z++;
    printf("\n账号或密码有误,请重新输入(你还有%d次机会):",2-z);
    printf("\n请输入密码(10位以内):");
    key(key1);fflush(stdin);
    if(strcmp(p->key,key1)==0)
    {
    stu_ui(p); break;
    }
    }
    }
    else
    {
    printf("该生不存在。"); break;
    }
    }while(z!=2);
    }

    void key_tec()//教师ID与密码验证
    {
    int z=0;
    z<=2;
    char key1[11];
    int id;
    struct tec p;
    system("cls");
    do
    {
    printf("\n\t\t\t|&|
    ************教师登录*************|&|\t");
    printf("\n\t\t\t|&|----------------------------------|&|\t");
    printf("\n\t\t\t|&| .--. |&|\t");
    printf("\n\t\t\t|&| /.-. '--------------. |&|\t");
    printf("\n\t\t\t|&| \'-' .--''--'' -''-' |&|\t");
    printf("\n\t\t\t|&| '--' |&|\t");
    printf("\n\t\t\t|&|----------------------------------|&|\t");
    printf("\n请输入教师ID(8位数字):");
    scanf("%d",&id); fflush(stdin);
    printf("\n请输入密码(10位以内):");
    key(key1);fflush(stdin);
    p=head_tec;
    while(p!=NULL)
    {
    if(p->id>=id) break;
    p=p->next;
    }
    if(p!=NULL)
    {
    if(strcmp(p->key,key1)==0)
    {
    tec_ui(p); break;
    }
    else
    {
    z++;
    printf("\n账号或密码有误,请重新输入(你还有%d次机会):",2-z);
    printf("\n请输入密码(10位以内):");
    key(key1);fflush(stdin);
    if(strcmp(p->key,key1)==0)
    {
    tec_ui(p); break;
    }
    }
    }
    else
    {
    printf("\n对不起,该ID不存在,请查证后再输入。");
    break;
    }
    }while(z!=2);
    }

    void key_adm()//管理员密码验证 只要密码
    {
    int z=0;
    char key1[11];
    system("cls");
    do
    {
    printf("\n\t\t\t|&|*************管理员登录***********|&|\t");
    printf("\n\t\t\t|&|----------------------------------|&|\t");
    printf("\n\t\t\t|&| .--. |&|\t");
    printf("\n\t\t\t|&| /.-. '--------------. |&|\t");
    printf("\n\t\t\t|&| \'-' .--''--'' -''-' |&|\t");
    printf("\n\t\t\t|&| '--' |&|\t");
    printf("\n\t\t\t|&|----------------------------------|&|\t");
    printf("\n请输入密码(10位以内):");
    key(key1);
    if(strcmp(in1.key,key1)==0||strcmp(in2.key,key1)==0)
    {
    adm_ui_1(); break;
    }
    else
    {
    z++;
    printf("\n密码错误请重新输入(你还有%d次机会):",2-z);
    }
    }while(z!=2);
    }

    void st_key_stu(struct stu *p)//学生密码修改
    {
    char key1[11],key2[11];
    int z=1;
    system("cls");
    do
    {
    printf("\n请输入新密码:");
    key(key1); fflush(stdin);
    printf("\n请再次输入新密码:");
    key(key2); fflush(stdin);
    if(strcmp(key1,key2)==0)
    {
    strcpy(p->key,key1); printf("\n密码修改成功!");break;
    }
    else
    {
    printf("\n两次密码不一致,请重新输入,不再修改请输入0,继续修改请输入任何其余值.");
    scanf("%d",&z); fflush(stdin);
    }
    }while(z!=0);

    }

    void st_key_tec(struct tec *p)// 教师密码修改
    {
    char key1[11],key2[11];
    int z=1;
    system("cls");
    do
    {
    printf("\n请输入新密码:");
    key(key1); fflush(stdin);
    printf("\n请再次输入新密码:");
    key(key2); fflush(stdin);
    if(strcmp(key1,key2)==0)
    {
    strcpy(p->key,key1); printf("\n密码修改成功!"); break;
    }
    else
    {
    printf("\n两次密码不一致,请重新输入,不再修改请输入0,继续修改请输入任何其余值.");
    scanf("%d",&z); fflush(stdin);
    }
    }while(z!=0);

    }

    void adm_key()//管理员密码修改
    {
    int z=0;
    char key0[11],key1[11],key2[11];
    system("cls");
    do
    {
    printf("\n请输入原密码(10位以内):");
    key(key0); fflush(stdin);
    if(strcmp(in1.key,key0)==0||strcmp(in2.key,key0)==0)
    {
    break;
    }
    else
    {
    z++;
    printf("\n密码错误请重新输入(你还有%d次机会).",5-z);
    }
    }while(z!=5);
    if(z!=5)
    {
    do
    {
    printf("\n请输入新密码:");
    key(key1); fflush(stdin);
    printf("\n请再次输入新密码:");
    key(key2); fflush(stdin);
    if(strcmp(key1,key2)==0)
    {
    strcpy(in1.key,key1); break;
    }
    else
    {
    printf("\n两次密码不一致,请重新输入,不再修改请输入0,继续修改请输入1.");
    scanf("%d",&z);
    }
    }while(z!=0);

     }else exit(0);
    

    }

    void key(char *key)//以星号形式接受密码并放到地址key上
    {

    int i=0,j=0;

    char c;

    for(;;)

    {
    c=getch();

    if(j==0)
    {
        if((int)c==13)
        {
            printf("\n哦,不,你必须输入密码,这是规则!");
            printf("\n请输入密码:");
        }
        else if((int)c==8) *key='\0';
        else
        {
            j=1;*key=c;key++;i++;
            printf("*");
        }
    }
    else
    {
        if(i>=29 && (int)c!=13 && (int)c != 8 )
        {
            *key='\0';
        }
        else if((int)c==8)
        {
            if(i>0)
            {
            i--;
            key--;
            *key='\0';
            printf("\b");printf(" ");printf("\b");
            }
            else
            {
                j=0;
                *key='\0';
            }
        }
        else if((int)c==13)
        {
            break;
        }
        else
        {
            *key=c;
            key ++;
            i++;
            printf("*");
        }
    }
    

    }
    *key='\0';

    printf("\n");

    }

    void stu_score(struct tec * p) //教师查看学生分数 按id
    {
    struct cla *p1;
    struct res *p2;
    int id;
    int z=1;
    system("cls");

        printf("\n请输入学生ID:");
        scanf("%d",&id);fflush(stdin);
    do
    {
        p1=p->cla;
    while(p1!=NULL)
    {
         if(p1->id==id) break;
         p1=p1->tec;
    }
    if(p1!=NULL)
    {
        printf("\n---------------------------------------------------------------------");
        printf("\n学生ID>>>>学生姓名>>考试成绩>>>>平时成绩>>>>综合成绩>>>>重修成绩>>>>>>");
        printf("\n---------------------------------------------------------------------");
        printf("\n%d  %s   %.2f \t %.2f \t %.2f \t %.2f \t",p1->id,p1->stu_name,p1->e_score,p1->n_score,p1->t_score);
        p2=p1->res;
        while(p2!=NULL)
        {
             printf("(%d)%d  ",p2->times,p2->score);
             p2=p2->next;
        }
        z=0;
        getchar();
    }
    else
    {
         printf("\n找不到该学生!请重新输入ID(或者输入0结束查询):");
         scanf("%d",&id);
    }
    
    }while(id!=0&&z!=0);
    

    }

    void tec_score(struct tec * head) //give score to someone 教师给分
    {
    struct cla *p;
    int id;
    p=head->cla;
    system("cls");
    if(p==NULL)
    {
    printf("\n还没有学生选择你的课程。");
    }
    else
    {
    skim_list_stu(head);
    do
    {
    printf("\n请输入学生的ID:");
    scanf("%d",&id);
    while(id!=0)
    {
    while(p!=NULL)
    {
    if(p->id!=id)
    {p=p->tec; continue;}
    else
    {
    printf("\n请输入学生的分数(考试成绩 平时成绩):");
    scanf("%f",&p->e_score);
    scanf("%f",&p->n_score);
    if(p->e_score {
    p->t_score=p->e_score;
    }
    else
    {
    p->t_score=0.5*p->n_score+0.5*p->e_score;
    }
    printf("\n成功登记分数。");
    break;
    }
    }

             printf("\n请输入学生的ID(不再登记请输入0):");
              scanf("%d",&id);
            }
        }while(id!=0);
    
    }
    

    }

    int score_stu(struct stu* p) // 计算学生学分
    {
    int z=0;
    struct cla *p1;
    struct res *p2;
    p1=p->cla;
    while(p1!=NULL)
    {
    if(p1->e_score>=60)
    z+=p1->score;
    else
    {
    p2=p1->res;
    if(p2!=NULL)
    {
    while(p2!=NULL)
    {
    if(p2->score>=60)
    z=z+p1->score;
    p2=p2->next;
    }
    }
    }
    p1=p1->next;
    }
    return z;

    }

    void select_s(struct stu * p) //学生选课选修
    {
    struct tec p1;
    struct cla cla1;
    struct cla *cp;
    p1=head_tec;
    system("cls");
    printf("\n\t\t\t------------------------------------------");
    printf("\n\t\t\t
    **************课程列表*******************");
    printf("\n\t\t\t------------------------------------------");
    printf("\n\t\t\t教师>>>>学分>>>>>课程名称>>>>>>>课程编号>>");
    printf("\n\t\t\t------------------------------------------");
    while(p1!=NULL)
    {
    printf("\n\t\t\t%s \t%d\t%-10s\t%-10d",p1->name,p1->score,p1->cla_name,p1->cla_id);
    p1=p1->next;
    }
    printf("\n\t\t\t------------------------------------------");
    printf("\n请输入你要选的课程编号+课程名称(输入0返回学生主页):");
    scanf("%d%s",&cla1.id,cla1.name);
    if(cla1.name[0]!='0'&&cla1.id!=0)
    {
    cla1.id=p->id;
    cla1.e_score=0;
    cla1.n_score=0;
    cla1.t_score=0;
    cla1.score=0;
    cp=insert_cla1(cla1);
    insert_cla2(cp);
    printf("\n选课成功!");
    }
    getchar();
    }

    int idc(char id) //id装换 char 到int
    {
    int z=0;
    int i=0;
    int l,n=1;
    l=strlen(id);
    for(i=0;i<l;i++)
    {
    n
    =10;
    }
    i=0;
    n/=10;
    while(id[i]!='\0')
    {
    z=z+((int)id[i]-48)*n;
    i++;
    n/=10;
    }
    return z;
    }

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

报告相同问题?

悬赏问题

  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误