输出到文本里的时候在末尾会一串乱码,原始数据还在,希望能删除那个代码,不然后续功能很难使用。
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"))==0)
{
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"))==0)
{
printf("can't open file\n");
exit(0);
}
Node *p=first->next;
while(p!=0){
fprintf(fp1,"%5d%12s%9s%9d%9d%11d%11d",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)
main();
else
exit(0);
}