论坛也发了贴,根据他的回答我改了我的程序,然而运行完一遍之后还是一样有一串不明代码,codeblocks也不报警告了。我把我完整的程序放上来,大概有500行,每个功能用完之后都会出现这个问题,我必须吧乱码删了才能继续下一个功能。网友告诉我函数后面要加return ;但是我试了下发现程序直接结束了,不会再跳到主函数,所以我只能用main()来进行返回主菜单的功能
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct course
{
int num; /*课程编号*/
char name[30]; /*课程名称*/
char kind[20]; /*课程性质*/
int time; /*课时*/
int mark; /*学分*/
int term; /*1为考试2为考察*/
int opterm; /*开课学期*/
};
typedef struct Node /*创建头结点*/
{
struct course d;
struct Node *next;
}Node;
/*课程插入*/
void insert()
{
FILE *fp1;
int g=1,key=0,key1=0,f=0;
int a=0,b=0;
if((fp1=fopen("course.txt","r"))==NULL)
{
printf("can't open file\n");
exit(0);
}
Node *first=(Node *)malloc(sizeof(Node)); /*头指针初始化*/
first->next=0;
for(;!feof(fp1);)
{
Node *s=(Node*)malloc(sizeof(Node));
fscanf(fp1,"%d%s%s%d%d%d%d",&s->d.num,s->d.name,s->d.kind,&s->d.time,&s->d.mark,&s->d.term,&s->d.opterm);
s->next=first->next;
first->next=s;
}
for(;g==1;)
{
printf("请输入需要插入的课程信息:\n课程编号,课程名称,课程性质,课时,学分,1为考试2为考察,开课学期\n");
Node *e=(Node*)malloc(sizeof(Node));
scanf("%d%s%s%d%d%d%d",&e->d.num,e->d.name,e->d.kind,&e->d.time,&e->d.mark,&e->d.term,&e->d.opterm);
e->next=first->next;
first->next=e;
printf("是否继续输入?1为是,2为否\n");
key=0;
while(key==0){
scanf("%d",&g);
if(g==1||g==2)
key=1;
else
{printf("\n输入错误,请重新输入!!!\n");
printf("是否继续输入?1为是,2为否\n");}
}
}
fclose(fp1);
printf("是否存盘??1为是2为否\n");
while(key1==0){
scanf("%d",&f);
if(f==1||f==2)
key1=1;
else
printf("\n输入错误,请重新输入!!!\n");
}
if(f==1)
{
if((fp1=fopen("course.txt","w"))==NULL)
{
printf("can't open file\n");
exit(0);
}
Node *p=first->next;
while(p!=0){
fprintf(fp1,"%5d%12s%9s%9d%9d%11d%11d\n",p->d.num,p->d.name,p->d.kind,p->d.time,p->d.mark,p->d.term,p->d.opterm);
p=p->next;
}
}
printf("录入完毕\n");
Node *k=first;
while(first!=0){
first=first->next;
free(k);
k=first;
}
fclose(fp1);
while(b==0){
printf("\n1-返回主菜单;2-退出系统\n");
scanf("%d",&a);
if(a==1||a==2)
b=1;
else
printf("\n输入错误,请重新输入!!!\n");
}
if(a==1)
return main();
else
exit(0);
}
/*课程浏览ok的,从文本文件中输入数据浏览*/
void browser()
{
FILE *fp2;
struct course c;
int a=0,b=0;
if((fp2=fopen("course.txt","r"))==NULL)
{
printf("\ncan't open course!\n");
exit(0);
}
printf("课程编号 课程名称 课程性质 总学时 学分 考试课1或考察课2 开课学期:\n");
while(!feof(fp2))
{
fscanf(fp2,"%d%s%s%d%d%d%d",&c.num,c.name,c.kind,&c.time,&c.mark,&c.term,&c.opterm);
printf("%5d%12s%9s%9d%9d%11d%11d\n",c.num,c.name,c.kind,c.time,c.mark,c.term,c.opterm);
}
fclose(fp2);
printf("\n结果已全部显示!!!!\n");
while(b==0){
printf("\n1-返回主菜单;2-退出系统\n");
scanf("%d",&a);
if(a==1||a==2)
b=1;
else
printf("\n输入错误,请重新输入!!!\n");
}
if(a==1)
return main();
else
exit(0);
}
/*课程查询ok的,从文本文件中输入数据判断查询*/
void search()
{
FILE *fp3;
struct course c;
int score;
char kind[10];
int b=0,e=0,a=0,d=0;
while(e==0){
printf("1.按课程编号查询,2.按课程名称查询.\n");
printf("请选择查询方式并输入选项数字:");
scanf("%d",&b);
if(b==1||b==2)
e=1;
else
printf("\n输入错误,请重新输入!!!\n");
}
if(b==1)
{
printf("\n请输入您要查询的课程编号:\n");
scanf("%d",&score);
if((fp3=fopen("course.txt","r"))==NULL)
{
printf("\nCannot open course!\n");
exit(0);
}
printf("课程编号 课程名称 课程性质 总学时 学分 考试课1或考察课2 开课学期:\n");
for(;!feof(fp3);)
{
fscanf(fp3,"%d%s%s%d%d%d%d\n",&c.num,c.name,c.kind,&c.time,&c.mark,&c.term,&c.opterm);
if(c.mark==score)
printf("%5d%12s%9s%9d%9d%11d%11d\n",c.num,c.name,c.kind,c.time,c.mark,c.term,c.opterm);
}
}
else
{printf("\n请输入您要查询的课程名称:\n");
scanf("%s",kind);
if((fp3=fopen("course.txt","r"))==NULL)
{
printf("\nCannot open course!\n");
exit(0);
}
printf("课程编号 课程名称 课程性质 总学时 学分 考试课1或考察课2 开课学期:\n");
for(;!feof(fp3);)
{
fscanf(fp3,"%d%s%s%d%d%d%d\n",&c.num,c.name,c.kind,&c.time,&c.mark,&c.term,&c.opterm);
if(strcmp(c.kind,kind)==0)
printf("%5d%12s%9s%9d%9d%11d%11d\n",c.num,c.name,c.kind,c.time,c.mark,c.term,c.opterm);
}
}
fclose(fp3);
printf("\n结果已全部显示!!!!\n");
while(d==0){
printf("\n1-返回主菜单;2-退出系统\n");
scanf("%d",&a);
if(a==1||a==2)
d=1;
else
printf("\n输入错误,请重新输入!!!\n");
}
if(a==1)
return main();
else
exit(0);
}
/*课程修改*/
void revise()/*修改函数的名字*/
{
int a=0,b=0;
int h,f;
int key1=0;
FILE *fp4;
if((fp4=fopen("course.txt","r"))==NULL)
{
printf("\nCannot open course!\n");
exit(0);
}
Node *first=(Node *)malloc(sizeof(Node)); /*头指针初始化*/
first->next=0; /*工作指针*/
for(;!feof(fp4);)
{
Node *s=(Node*)malloc(sizeof(Node));
fscanf(fp4,"%d%s%s%d%d%d%d",&s->d.num,s->d.name,s->d.kind,&s->d.time,&s->d.mark,&s->d.term,&s->d.opterm);
s->next=first->next;
first->next=s;
}
printf("请输入需要修改的课程编号\n");
scanf("%d",&h);
Node *p=first->next;
while(p!=0){
if(h==p->d.num)
{
printf("课程编号 课程名称 课程性质 总学时 学分 考试课1或考察课2 开课学期:\n");
printf("%5d%12s%9s%9d%9d%11d%11d\n",p->d.num,p->d.name,p->d.kind,p->d.time,p->d.mark,p->d.term,p->d.opterm);
printf("请输入替换的正确的课程信息\n");
scanf("%d%s%s%d%d%d%d",&p->d.num,p->d.name,p->d.kind,&p->d.time,&p->d.mark,&p->d.term,&p->d.opterm);
}
else
;
p=p->next;
}
printf("是否存盘??1为是2为否\n");
while(key1==0){
scanf("%d",&f);
if(f==1||f==2)
key1=1;
else
printf("\n输入错误,请重新输入!!!\n");
}
if(f==1)
{
fclose(fp4);
if((fp4=fopen("course.txt","w"))==NULL)
{
printf("can't open file\n");
exit(0);
}
Node *p1=first->next;
while(p1!=0){
fprintf(fp4,"%5d%12s%9s%9d%9d%11d%11d\n",p1->d.num,p1->d.name,p1->d.kind,p1->d.time,p1->d.mark,p1->d.term,p1->d.opterm);
p1=p1->next;
}
}
printf("修改完毕\n");
Node *k=first;
while(first!=0){
first=first->next;
free(k);
k=first;
}
fclose(fp4);
while(b==0){
printf("\n1-返回主菜单;2-退出系统\n");
scanf("%d",&a);
if(a==1||a==2)
b=1;
else
printf("\n输入错误,请重新输入!!!\n");
}
if(a==1)
return main();
else
exit(0);
}
/*课程删除*/
void delet()
{
int a=0,b=0;
int h;
FILE *fp;
printf("请输入需要删除的课程编号\n");
scanf("%d",&h);
if((fp=fopen("course.txt","r"))==NULL)
{
printf("\nCannot open course!\n");
exit(0);
}
Node *first=(Node *)malloc(sizeof(Node)); /*头指针初始化*/
first->next=0; /*工作指针指向头结点*/
for(;!feof(fp);)
{
Node *s=(Node*)malloc(sizeof(Node));
fscanf(fp,"%d%s%s%d%d%d%d",&s->d.num,s->d.name,s->d.kind,&s->d.time,&s->d.mark,&s->d.term,&s->d.opterm);
s->next=first->next;
first->next=s;
}
Node *p1=first;Node *p2=first;Node *p3=first;
int count=0,dele=0,obey=0;
printf("请输入需要删除的课程编号\n");
scanf("%d",&dele);
for(;p1->next==0;)
{
if(p1->d.num==dele)
{
count++;
printf("课程编号 课程名称 课程性质 总学时 学分 考试课1或考察课2 开课学期:\n");
printf("%5d%12s%9s%9d%9d%11d%11d\n",p1->d.num,p1->d.name,p1->d.kind,p1->d.time,p1->d.mark,p1->d.term,p1->d.opterm);
printf("请确认是否删除???1-是,2-否\n");
scanf("%d",&obey);
if(obey==1)
{
p2->next=p1->next;
free(p1);
printf("删除成功!!!!\n");
}
else;
}
else;
p2=p1;
p1=p1->next;
}
while(p1!=0){
fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d\n",p3->d.num,p3->d.name,p3->d.kind,p3->d.time,p3->d.mark,p3->d.term,p3->d.opterm);
p3=p3->next;
}
while(b==0){
printf("\n1-返回主菜单;2-退出系统\n");
scanf("%d",&a);
if(a==1||a==2)
b=1;
else
printf("\n输入错误,请重新输入!!!\n");
}
if(a==1)
return main();
else
exit(0);
}
/*统计选课情况*/
void statistics()
{
int a;
FILE *fp;
if((fp=fopen("course.txt","r"))==NULL)
{
printf("\nCannot open course!\n");
exit(0);
}
Node *first=(Node *)malloc(sizeof(Node)); /*头指针初始化*/
first->next=0;
for(;!feof(fp);)
{
Node *s=(Node*)malloc(sizeof(Node));
fscanf(fp,"%d%s%s%d%d%d%d",&s->d.num,s->d.name,s->d.kind,&s->d.time,&s->d.mark,&s->d.term,&s->d.opterm);
s->next=first->next;
first->next=s;
}
Node *e=first->next;
int count1,count2,count3,count4;
for(;e==0;)
{
if(e->d.opterm==1)
count1++;
else
if(e->d.opterm==2)
count2++;
else
if(e->d.opterm==3)
count3++;
else
if(e->d.opterm==4)
count4++;
else
printf("课程编号 课程名称 课程性质 总学时 学分 考试课1或考察课2 开课学期:\n");
printf("%5d%12s%9s%9d%9d%11d%11d\n",e->d.num,e->d.name,e->d.kind,e->d.time,e->d.mark,e->d.term,e->d.opterm);
e=e->next;
}
printf("开课学期为1的有%d门,开课学期为2的有%d门,开课学期为3的有%d门,开课学期为4的有%d门\n",count1,count2,count3,count4);
Node *k=first;
while(first!=0){
first=first->next;
free(k);
k=first;
}
fclose(fp);
printf("\n1-返回主菜单;2-退出选课系统\n");
scanf("%d",&a);
if(a==1)
return main();
else
exit(0);
}
/*主菜单*/
void main()
{
int n,w;
printf("*********************************************************************************\n");
printf(" 学生选课系统菜单\n");
printf("*********************************************************************************\n");
printf(" 1-录入\n");
printf(" 2-浏览\n");
printf(" 3-查询\n");
printf(" 4-修改\n");
printf(" 5-删除\n");
printf(" 6-统计\n");
printf(" 0-退出\n");
printf("*********************************************************************************\n");
printf(" 请输入选项前的数字\n");
scanf("%d",&n);
do
{
if(n>5||n<0)
{
printf("\n输入错误\n");
scanf("%d",&n);
}
else w=1;
}while(w==0);
switch(n)
{
case 1:insert();break;
case 2:browser();break;
case 3:search();break;
case 4:revise();break;
case 5:statistics();break;
case 6:delet();break;
case 0:exit(0);
}
}