C语言教学信息管理系统程序设计出错。。

来源:互联网 发布:淘宝申请食品经营资质 编辑:程序博客网 时间:2024/04/26 17:41

这个程序设计调了好久,还是有错!郁闷!而且不知道为什么错了?

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define  TITLE  "教学信息管理系统" //标题文字

#define  MAX  10 

#define  MENU_MAiN_COUNT  7//主菜单的选项个数

#define  MENU_SEARCH_COUNT  3//查询子菜单的选项个数

#define  MENU_PAIXU_COUNT  3//排序的选项个数

typedef struct  teacher

{ int num;// 职工号

char name[MAX];// 姓名

char  workname[MAX];//职称

char sex[MAX];// 性别

struct

{  char clasname[MAX]; //课程名称

int  time ; //开课学期

char xingzhi[MAX]; //课程性质(学位与非学位课)

char xiaoguo[MAX];//教学效果

}clas[3]; //3门主讲课程

int fenshu; //教学效果综合评分

struct  teacher *next;//指向下一个教师的指针

}tea;

tea* head=NULL;

 

void input_record();//输入教师记录的处理

void show_record();//显示教师记录的处理

void search_record();//查询教师记录的处理

void paixu_record();//排序教师记录的处理

 

void charu_record();//插入教师记录的处理

void save_to_file();//保存到文件的处理

void exit_system();//退出

void search_by_name();//通过姓名检索教师的处理

void search_by_clas();//通过课程检索教师的处理

void search_exit();//退出子菜单

void paixu_by_num();//通过职工号对教师排序的处理

     void paixu_by_fengshu();//通过教学效果综合评分对教师排序的处理

 void paixu_exit();//退出子菜单

void create_teacher_by_input(tea*p);//通过输入为teacher赋值

   tea* get_last_teacher(tea*p);//找到最后一个教师的记录

   void clear_record(tea*p);//清空所有记录

void print_menu_main();//显示主菜单

void print_menu_title(char*title);//显示菜单的标题

void print_table_head();//显示教师记录的表格的头部

void print_table_row(tea *p);//显示一条教师记录

void print_table_buttom();//显示教师记

 

 

char menu_main[]=

"|\n"

 

"| 1 输入教师信息\n"

 

"| 2 显示教师信息\n"

"| 3 查找教师信息\n"

"| 4 排序教师信息\n"

"| 5 插入教师信息\n"

"| 6 保存文件\n"

"| 7 退出系统\n"

"|\n";

 

 

  void (*  menu_main_func[])()=

{

input_record,

show_record,

 search_record,

paixu_record,

charu_record,

save_to_file,

exit_system

};

 

 

char menu_search[]=

 "|\n"

     "| 1 按姓名查询教师信息\n"

     "| 2 按课程查询教师信息\n"

"| 3 返回上级菜单\n"

"|\n";

 

 

void (* menu_search_func[])()=

{ search_by_name,

 search_by_clas,

 search_exit

};

 

 

char menu_paixu[]=

"|\n"

"| 1 按职工号排序\n"

"| 2 按教学效果综合评分排序\n"

"| 3 返回上级菜单\n"

"|\n";

 

 

void (*menu_paixu_func[])()=

{

paixu_by_num ,

 paixu_by_fengshu,

paixu_exit

};

 

   void main()

{   print_menu_main();//显示主菜单等待用户输入

   }

 

 

 

void intput_record()

{  char continue_input='N';

tea* plastea=NULL;

 tea* pnewtea=(tea*)malloc(sizeof(tea));

 pnewtea->next=NULL;

 create_teacher_by_input(pnewtea);//让用户为创建的tea赋值

 if(head==NULL)//一个都没有

 { head=pnewtea; }

 else

 {    plastea=get_last_teacher(head);

    plastea->next=pnewtea;

  }

 printf("继续输入教师信息?(y继续,n返回菜单)");

 getchar();

 continue_input=getchar();

 if(continue_input=='n'||continue_input=='N')

 {  print_menu_main();//不继续输入,将显示主菜单

 }

 else

 {    input_record();}//再次调用这个函数输入新的教师信息

}

 

 

void show_record()

{    tea* p=head;

print_table_head();//显示教师记录的表格的头部

/*逐条显示教师记录*/

while(p!=NULL)

{

   print_table_row(p);//显示一个教师的信息

p=p->next;

}

print_table_buttom();//显示表格尾

printf("按任意键返回菜单..\n");

getchar();

getchar();

print_menu_main();

 

}

 

 

 

void search_record()

{   int selected=0;

system("cls");

print_menu_title("查询教师记录");

printf(menu_search);

printf("============================================\n");

while(!(selected>=1&&selected<=MENU_SEARCH_COUNT))

{

   printf(">请选择:");

scanf("%d",&selected);

if(selected>=1&&selected<= MENU_SEARCH_COUNT)

{   break; }

printf("\n>输入错误!(请选择1-%d)\n", MENU_SEARCH_COUNT);

}

menu_search_func[selected-1]();//调用用户选择项所对应的函数

}

 

 

 

void search_by_name ()

{   char name[MAX];

   char continue_input='N';

tea *p=head;

int isfound=0;

printf(">请输入教师的姓名:");

scanf("%s",name);

printf("\n>查找[%s]\n",name);

print_table_head();

while(p!=NULL)

{  if(strcmp(p->name,name)==0)

{   print_table_row(p);

   isfound+=1;

 

}

p=p->next;

}

if(!isfound)

   printf("\n没有找的结果!\n");

print_table_buttom();

printf("继续查找?(y继续,n返回)");

getchar();

continue_input=getchar();

if(continue_input=='y'||continue_input=='Y')

{     search_by_name();}//继续调用这个函数查找

else

{    search_record();}//重新显示查询子菜单,即返回菜单

}

 

 

    void search_by_clas()

{  int i; 

 char  clas[3][MAX];

  char continue_input='N';

tea *p=head;

int isfound=0;

for(i=0;i<3;i++)

{printf(">请输入教三:");

scanf("%s",clas[i]);

printf("\n>查找[%s]\t",clas[i]);}

printf("\n");

print_table_head();

while(p!=NULL)

{  if(((strcmp(p->clas[0].clasname,clas[0])==0)

&&(strcmp(p->clas[1].clasname,clas[1])==0)

&&(strcmp(p->clas[2].clasname,clas[2])==0)))

{   print_table_row(p);

   isfound+=1;

}

p=p->next;

}

if(!isfound)

   printf("\n没有找的结果!\n");

print_table_buttom();

printf("继续查找?(y继续,n返回)");

getchar();

continue_input=getchar();

if(continue_input=='y'&&continue_input=='Y')

{     search_by_clas();}//继续调用这个函数查找

else

{    search_record();}//重新显示查询子菜单,即返回菜单

}

 

void search_exit()

print_menu_main();

}

 

 void paixu_record()

{   int selected=0;

system("cls");

print_menu_title("排序教师记录");

printf(menu_paixu);

printf("============================================\n");

while(!(selected>=1&&selected<=MENU_PAIXU_COUNT))

{

   printf(">请选择:");

scanf("%d",&selected);

if(selected>=1&&selected<= MENU_PAIXU_COUNT)

{   break; }

printf("\n>输入错误!(请选择1-%d)\n", MENU_PAIXU_COUNT);

}

menu_paixu_func[selected-1]();//调用用户选择项所对应的函数

}

 

 

void paixu_by_num()

   tea *x,*q;

   char continue_input='N';

tea *p=head;

q=p;

print_table_head();

while(q!=NULL)

for( p=q,x=p;p!=NULL;p=p->next)

 { 

if((x->num)>(p->next->num)) x=p->next;}

print_table_row(x);

q=q->next;

}

print_table_buttom();

printf("重新排序?(y继续,n返回)");

getchar();

continue_input=getchar();

if(continue_input=='y'&&continue_input=='Y')

{     paixu_by_num();}//继续调用这个函数查找

else

{    paixu_record();}//重新显示查询子菜单,即返回菜单

}

 

 

void paixu_by_fenshu()

{

   tea *x,*q;

   char continue_input='N';

tea *p=head;

q=p;

print_table_head();

while(q!=NULL)

for( p=q ,x=p ;p!=NULL;p=p->next)

 {  

if((x->fenshu)>(p->next->fenshu)) x=p->next;}

print_table_row(x);

q=q->next;

}

print_table_buttom();

printf("重新排序?(y继续,n返回)");

getchar();

continue_input=getchar();

if(continue_input=='y'&&continue_input=='Y')

{     paixu_by_fenshu();}//继续调用这个函数查找

else

{    paixu_record();}//重新显示查询子菜单,即返回菜单

}

 

 

void paixu_exit()

print_menu_main();

}

 

    void charu_record()

{  char continue_input='N';

tea * plastea=NULL;//创建一个tea

tea* pnewtea=(tea*)malloc(sizeof(tea));

pnewtea->next=NULL;

create_teacher_by_input(pnewtea);//让用户为创建的tea赋值

if(head==NULL)//一个都没有

{ head=pnewtea; }

else

{    plastea=get_last_teacher(head);

    plastea->next=pnewtea;

  }

printf("继续插入教师信息?(y继续,n返回菜单)");

getchar();

continue_input=getchar();

if(continue_input=='n'||continue_input=='N')

{  print_menu_main();//不继续输入,将显示主菜单

}

else

{    input_record();}//再次调用这个函数输入新的教师信息

 

}

 

    void save_to_file() 

   {  

    FILE *fp;

   char file[100];

   tea *p=head;

   printf("请输入文件名:");

   scanf("%s",file);

    fp=fopen(file,"w");

   while(p!=NULL)

{   fprintf(fp,"%d,%s,%s,%s,   %s,%d,%s,%s, %s,%d,%s,%s, %s,%d,%s,%s, %d", p->num, p->name, p->workname, p->sex,  p->clas[0].clasname, p->clas[0].time,  p->clas[0].xingzhi, p->clas[0].xiaoguo,      p->clas[1].clasname, p->clas[1].time, p->clas[1].xingzhi, p->clas[1].xiaoguo,

p->clas[2].clasname, p->clas[2].time, p->clas[2].xingzhi, p->clas[2].xiaoguo,

     p->fenshu);

      p=p->next;

}

fclose(fp);

 printf("保存成功!\n按任意键返回菜单...\n");

 

  getchar();

  getchar();

print_menu_main();

}

 

void exit_system()

{    

  clear_record(head);//释放整个链表

exit(0);

}

 

void print_menu_main()

{   int selected=0;//用户选择的菜单项

    system("cls");//清屏

   print_menu_title(TITLE);//显示标题

   printf(menu_main);//显示菜单字符

printf("=====================================================\n");/*如果用户没有选择或选择错误,循环等待*/

  while(!(selected>=1&&selected<=MENU_MAiN_COUNT))

{   printf(">请选择:");

   scanf("%d",&selected);

if(selected>=1&&selected<=MENU_MAiN_COUNT)

{    break;

}

printf("\n>输入错误!(:请选择1-%d)\n",MENU_MAiN_COUNT);

}

/*调用用户选择的菜单项对应的函数指针数组中的函数*/

  menu_main_func[selected-1]();

  }

 

 void create_teacher_by_input(tea* p)

{   printf(">请输入学生信息(:最大长度是10个字符):\n");

 printf("职工号:");scanf("%d",p->num);

printf("姓名:") ; scanf("%s",p->name);

printf("职称:"); scanf("%s",p->workname);

printf("性别:") ;scanf("%s",p->sex);

printf(">请输入第一主要门课程的信息:\n");

    printf("课程名称:");scanf("%s",p->clas[0].clasname);

printf("开课学期:");scanf("%d",p->clas[0].time);

printf("课程性质:");scanf("%s",p->clas[0].xingzhi);

printf("教学效果:");scanf("%s",p->clas[0].xiaoguo);

printf(">请输入第二主要门课程的信息:\n");

    printf("课程名称:");scanf("%s",p->clas[1].clasname);

printf("开课学期:");scanf("%d",p->clas[1].time);

printf("课程性质:");scanf("%s",p->clas[1].xingzhi);

printf("教学效果:");scanf("%s",p->clas[1].xiaoguo);

printf(">请输入第三主要门课程的信息:\n");

    printf("课程名称:");scanf("%s",p->clas[2].clasname);

printf("开课学期:");scanf("%d",p->clas[2].time);

printf("课程性质:");scanf("%s",p->clas[2].xingzhi);

printf("教学效果:");scanf("%s",p->clas[2].xiaoguo);

 

 printf(">请输入教学效果综合评分:\n");  scanf("%d",p->fenshu);

}

 

 

 tea* get_last_teacher(tea*  p)

  {

     if(p->next==NULL)

     return p;

 

else{

   return get_last_teacher(p->next);

}

 

 

 void clear_record(tea *p)

{

       if(p==NULL)

{        return;}

   if(  p->next==NULL)

{       free(p);}

else{

    clear_record(p->next);

free(p);

  p=NULL;

}

}

 

  void print_menu_title(char* title)

{

    printf("======================================================\n");

printf("|%s\n",title);

printf("-------------------------------------------------\n");  

}

 

 

 void print_table_head()

{

     printf("----------------------------------------------------\n");

printf("职工号|姓名|职称|性别|课程名称一|开课学期一|课程性质一|教学效果一

课程名称二|开课学期二|课程性质二|教学效果二|课程名称三|开课学期三|课程性质三|教学效果三|教学效果综合评分|\n

");

printf("------------------------------------------------------+\n");

}

 

void print_table_row(tea*p)

{

 printf("%d",p->num);

printf("%s",p->name);

printf("%s",p->workname);

printf("%s",p->sex);

    printf("%s",p->clas[0].clasname);

printf(,p->clas[0].time);

printf("%s",p->clas[0].xingzhi);

printf("%s",p->clas[0].xiaoguo);

 

    printf("%s",p->clas[1].clasname);

printf("%d",p->clas[1].time);

printf("%s",p->clas[1].xingzhi);

printf("%s",p->clas[1].xiaoguo);

 

 printf("%s",p->clas[2].clasname);

printf("%d",p->clas[2].time);

printf("%s",p->clas[2].xingzhi);

printf("%s",p->clas[2].xiaoguo);

 

 printf("%d",p->fenshu);

}

 

 

void print_table_buttom()

{

printf("-------------------------------------------------\n");

}

 

原创粉丝点击