2 ligaogang ligaogang 于 2013.10.27 00:03 提问

用链表做一个成绩管理系统,记录写在student.txt中,有些问题。望回答。

#include "stdio.h"
#include "io.h"
#include "malloc.h"
#define MAXSIZE 100
#define LEN 5
typedef char DataType;
typedef struct student{
DataType num[LEN],score[LEN];
DataType name[LEN];
}student;
typedef struct listnode{
student data;
int len;
struct listnode next;
}listnode;
//获得第n个节点
listnode
getnode(listnode q,int n)
{
int m=0;
listnode *s=q;
if(nq->len)
return NULL;
while(m!=n&&s->next)
{
s=s->next;
m++;
}
if(m==n)
return s;
else
return NULL;
}
//按位置插入,并写入文件
void insert(listnode *q,int n,FILE *fp)
{
listnode *s,*r;
int m;
s=(listnode
)malloc(sizeof(listnode));
printf("输入姓名\n");
fflush(stdin);
gets(s->data.name);
printf("输入学号\n");
fflush(stdin);
gets(s->data.num);
printf("输入分数\n");
fflush(stdin);
gets(s->data.score);
r=getnode(q,n-1);
s->next=r->next;
r->next=r;
fseek(fp,(n-1)*sizeof(struct student),0);
fprintf(fp,"\n%s\t\t%s\t\t%s\n",s->data.num,s->data.name,s->data.score);
}
//删除记录
void del(int n,FILE *fp)
{
listnode *head,*s,*r;
FILE *fp1;
head=ennc(fp);
s=getnode(head,n-1);
r=s->next;
s->next=r->next;
free(r);
fp1=enfile(head);
return fp1;

}
//调入内存
listnode* ennc(FILE fp)
{
char ch;
listnode *head,*s,*r;
head=(listnode
)malloc(sizeof(listnode));
head->next=NULL;
r=head;

ch=fgetc(fp);
if(ch==EOF)
{
printf("文件为空,按任意键退出\n");
getch();
exit(1);
}
fseek(fp,0,0);
while(ch!=EOF)
{
s=(listnode*)malloc(sizeof(listnode));
r->next=s;
r=s;
r->next=NULL;
fscanf(fp,"%s%s%s\n",s->data.num,s->data.name,s->data.score);
printf("当前调用的内容是:\n");
printf("%s\t\t%s\t\t%s\t\t\n",s->data.num,s->data.name,s->data.score);
ch=fgetc(fp);
}
return head;
}
//将内存中的内容写入文件
FILE* enfile(listnode *head)
{
listnode *s;
FILE *fp;
if((fp=fopen("student.txt","wt+"))==NULL)
{
printf("cannot open student.txt ,press any key exit\n");
getchar();
exit(1);
}

s=head->next;
while(s)
{
    fprintf(fp,"%s\t\t%s\t\t%s\n",s->data.num,s->data.name,s->data.score);
    s=s->next;
}
return fp;

}
void main()
{
int num,i;
char ch;
FILE fp;
student *pp,*qq;
listnode *head,*s,*r;
head=(listnode
)malloc(sizeof(listnode));
head->next=NULL;
r=head;
//检查文件是否存在,存在则打开,不存在则创建
if((_access("student.txt",0))!=-1)
{
if((fp=fopen("student.txt","at+"))==NULL)
{
printf("cannot open student.txt,press any key exit\n");
ch=getchar();
exit(1);
}
}
else
{
if((fp=fopen("student.txt","wt+"))==NULL)
{
printf("cannot open student.txt ,press any key exit\n");
ch=getchar();
exit(1);
}
}
ch=fgetc(fp);
if(ch!=EOF)
{
printf("文件不为空,现在将文件中内容调入内存\n");
while(ch!=EOF)
{
s=(listnode*)malloc(sizeof(listnode));
r->next=s;
r=s;
r->next=NULL;
fseek(fp,0,0);
fscanf(fp,"%s%s%s\n",s->data.num,s->data.name,s->data.score);
printf("%s\t\t%s\t\t%s\n",s->data.num,s->data.name,s->data.score);

ch=fgetc(fp);
}
}
//fputs("学号",fp); fputs("\t\t",fp);fputs("姓名",fp);fputs("\t\t",fp);fputs("成绩",fp);
//创建记录并写入记录到文件
else
{
printf("文件为空,现在录入记录,输入你想建立的学生信息记录条数\n");
scanf("%d",&num);
head->len=num;
for(i=0;i {
s=(listnode*)malloc(sizeof(listnode));
r->next=s;
r=s;
r->next=NULL;
printf("现在录入第%d个学生的信息,输入姓名\n",i+1);
fflush(stdin);
gets(s->data.name);
printf("输入学号\n");
fflush(stdin);
scanf("%s",&s->data.num);
printf("输入成绩\n");
fflush(stdin);
scanf("%s",&s->data.score);
fprintf(fp,"%s\t\t%s\t\t%s\n",s->data.num,s->data.name,s->data.score);
//kong
fseek(fp,0,2);
ch=fgetc(fp);
if(ch==EOF)
printf("kong\n");
else
printf("此位置以后为空\n");
/*
r=(listnode*)malloc(sizeof(listnode));
r->next=NULL;
qq=&(r->data);
fseek(fp,2*sizeof(struct student)+4,0);
fscanf(fp,"%s\t\t%s\t\t%s\n",qq->num,qq->name,qq->score);
printf("%s\t\t%s\t\t%s\n",qq->num,qq->name,qq->score);
/
//fwrite(pp,sizeof(struct student),1,fp);

/

fputs(" \n ",fp);
fputs(pp->num,fp);

fputs("\t\t",fp);
fputs(pp->name,fp);
fputs("\t\t",fp);
fputs(pp->score,fp);
fputs(" \n ",fp);
fseek(fp,0,2);
*/
}
}
printf("输入你要删除的数的序号,第几个\n");
scanf("%d",&num);
//del(fp,num);

//rewind(fp);

}
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
c语言制作的学生成绩管理系统 加链表
/*--------------------data.txt文件是存储学生成绩信息的文件---------------------------*/ /*--------------------time.txt文件是存储备份时间的文件-------------------------------*/ /*--------------------备份文件的文件名字需要自己输入-----------
学生成绩管理系统(用c++ 链表 结构体 编写)
这个学生成绩管理系统,由本人亲自编写,经过调试运行没有问题,总体设计(主要功能模块) ★ 学生信息载入模块 ★ 学生信息创建模块 ★ 学生信息查询模块 ★ 学生信息修改模块 ★ 学生信息统计模块 ★ 学生信息显示模块 ★ 学生信息保存模块 本程序采用链表的形式处理学生信息,所以用结构体储存学生的信息,每个函数模块都相互独立,源代码简单易懂,可以方便的删除、修改、添加模块,便于根据各种情况对程序升级,以完成任务。 感谢使用啊!
基于动态链表的学生成绩管理系统
学生综合利用本学期所学完成了学生成绩管理系统的编写,利用预处理、数据类型、自定义函数、结构体、链表、文件操作、Windows.h中某些处理等知识,在VS2012中对学生成绩管理系统进行编写,初步实现了管理员模式、来宾模式下的输入、删除、查询、修改、排序、保存、切换登陆模式、修改管理员信息、退出等功能,并且在删除、查询功能中实现按照学号或姓名操作,排序功能中实现按照学号、姓名、五门课成绩、总分进行由大到小或由小到大的排序。同时,本学生成绩管理系统初步解决了由于输入错误造成的严重后果,又以蓝底黄字及区域化布局的
C语言使用单链表的学生成绩管理系统
本系统的代码冗余还是蛮多的,其实可以再精简很多,可是后期自己懒得改了,这里强调一个思想----代码复用,这会大大节约自己的编程量,也可以使自己看待一个向项目有宏观的思想。关于这个系统,是采用单链表和文件写的,单链表在数据录入部分已经按照学号排好序,后期的数据输出也即很方便看待数据,其实可以在后期进行排序,我的想法有两种,①创建一个结构体数组,把数据重新导入结构体数组中,再进行快速排序;②使用指针,
使用C++结合文件操作和链表实现学生成绩管理系统
对于学生成绩管理系统,我是
用单链表实现学生成绩管理
数据结构实验二:线性表综合实验 1、实验目的         巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。 2、实验内容       .建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。 3、代码    #include   using
链表实现学生管理系统
#include #include #include #define Maxlen 100 struct Data//定义链表的元素个体 { char number[20]; char name[20]; char sex[10]; int age; char examtype[20]; }; typedef Data ElemType; struct Sq
数据结构——学生成绩管理系统的链表实现
收录学生的成绩学号姓名。 实现增添,删除,修改,查询等操作 :#include<bits/stdc++.h> #define LEN sizeof(struct stu) using namespace std; struct stu { int num; //学生学号 char nam
c++链表实现学生成绩管理系统(简易版)
当年c语言课设写这个是没写出来了的 ,现在有时间,就写了一个简易的,微微弥补一下一直以来的遗憾。#include&amp;lt;iostream&amp;gt; using namespace std; typedef struct student{ int id;//学号 string sex; string name; int cpp;//c++成绩 struct s...
用链表写的学生管理系统 成绩的录入与查询都已经是实现了
欢迎拍砖