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");
}
- C语言教学信息管理系统程序设计出错。。
- C语言学生信息管理系统
- c语言学生信息管理系统
- 学生信息管理系统 c语言
- C语言:学生信息管理系统
- c语言学生信息管理系统
- 【C语言】职工信息管理系统
- C语言职工信息管理系统
- C语言 学生信息管理系统
- C语言学生信息管理系统
- 员工信息管理系统--C语言
- 学生信息管理系统(c语言)
- 学生信息管理系统(C语言)
- C语言实现学生信息管理系统
- C语言设计之 学生信息管理系统
- C语言课程设计职工信息管理系统
- C语言学生信息管理系统设计
- c语言实现的学生信息管理系统
- java web培训_北软教育_工作日志_6.12
- 程序员技术练级攻略
- java web培训_北软教育_工作日志_6.13
- Android图形---OpenGL(二)
- ARM指令集问题:满递减与空递减
- C语言教学信息管理系统程序设计出错。。
- 利用反射测试私有方法
- 手把手教你把Vim改装成一个IDE编程环境(图文)
- USACO / Bessie Come Home( Dijkstra标程 )
- 用程序创建XmlSuite
- 重新设置testNG里面的annotation
- Android笔记-ListView总结(多选框ListViiew,动态加载,多线程更新ListView中的进度条)
- XmlSerializer 构造函数的性能问题
- STM32L系列产品技术资料与支持文件(分享)