当前位置: 代码迷 >> C语言 >> [求助]学生成绩管理系统
  详细解决方案

[求助]学生成绩管理系统

热度:379   发布时间:2004-12-20 15:43:00.0
[求助]学生成绩管理系统

各位帮帮忙吧,本人急需一道有关学生成绩管理系统的程序啊

用C语言编写,不用到链表,要用到文件

搜索更多相关的解决方案: 系统  学生  管理  

----------------解决方案--------------------------------------------------------
各位求求你们帮帮忙,快点吧!!!
----------------解决方案--------------------------------------------------------

为什么没人帮我啊?


----------------解决方案--------------------------------------------------------

我都自己写来了一个

不是很麻烦的


----------------解决方案--------------------------------------------------------

大姐,改成悬赏帖就有人帮你了阿

而且阿,你的题目挺下人得阿,系统,你知道那是多大得概念阿,下着 我们了阿

你说得是不是就是个小的 程序那。

这样得程序在书上就有阿 。

随便哪本c程书都有 阿


----------------解决方案--------------------------------------------------------

具体实现什么样的功能

介绍一下就可以了。

管理系统涉及数据库和编程,软件设计等多方面的领域。概念太广了。

楼主得弄明白!


----------------解决方案--------------------------------------------------------

# include "stdio.h" # include "string.h" # include "stdlib.h" # define NULL 0 # define MAX 5 # define TRUE 1

typedef struct node { char name[8]; int number; double score; }node;

static int recnum;

void creat() { char scorestr[100],ch,numstr[100]; node student; FILE *fp; if((fp=fopen("C:\stud.ree","wb"))==NULL) { printf("不能打开stud.ree!"); exit(0); } /*rewind(fp); 郁闷的定位函数!!! fseek(fp,recnum*sizeof(node),0); */ do { printf("\n姓名:");gets(student.name); printf("\n学号:"); gets(numstr);student.number=atoi(numstr); printf("\n成绩:"); gets(scorestr);student.score=atof(scorestr); fwrite(&student,sizeof(node),1,fp); recnum++; printf("输入其他的学生记录:(y/n)?"); ch=getchar();getchar(); }while(ch=='y'); fclose(fp); }

void list() { node student; char scorestr[100],ch; FILE *fp; if((fp=fopen("C:\stud.ree","rb"))==NULL) {printf("不能打开stud.ree!"); return; } printf("\n下面是学生资料:\n"); printf(" 学号 姓名 成绩\n");

while(fread(&student,sizeof(node),1,fp)==1) { printf("%1d %s %6.2f\n",student.number,student.name,student.score); } fclose(fp); }

int totalrec() /*计算文件的记录数,用recnum表示总记录数*/ { node student; FILE *fp; recnum=0; if((fp=fopen("C:\stud.ree","rb"))==NULL) return 0; while(fread(&student,sizeof(node),1,fp)==1) { recnum++; } fclose(fp); return (recnum); }

searchnum() { node student; FILE *fp; int i=1; int num1; printf("\n请输入学号:"); scanf("%d",&num1); if((fp=fopen("C:\stud.ree","rb"))==NULL) {printf("不能打开stud.ree!"); return; } while(i<=recnum) { if(fread(&student,sizeof(node),1,fp)==1 && student.number==num1) { printf("\n 姓名: %s \n",student.name); printf("\n学号: %1d \n",student.number); printf("\n成绩: %6.2f\n",student.score); } i++; } fclose(fp); }

searchscore() { node student; FILE *fp; int i=1; double score1; printf("\n请输入成绩(小数点后保留2位):"); scanf("%lf",&score1); if((fp=fopen("C:\stud.ree","rb"))==NULL) {printf("不能打开stud.ree"); return; } while(i<=recnum) { if(fread(&student,sizeof(node),1,fp)==1 && student.score==score1) { printf("\n 姓名 : %s \n",student.name); printf("\n学号: %1d \n",student.number); printf("\n年龄: %6.2f\n",student.score); } i++; } fclose(fp); }

main() {int n; /*N为选择函数变量*/ clrscr(); gotoxy(10,10); printf("欢迎进入学生学籍管理系统"); gotoxy(10,12); printf("1:显示学生信息 2:成绩查找信息"); gotoxy(10,14); printf("3:添加学生信息 4:删除学生信息"); gotoxy(10,16); printf("5:学号查找信息 6:退出管理系统");

while(TRUE) { totalrec(); printf("\n当前文件的记录数是:%d",recnum); printf("\n请选择(1-6)"); scanf("%d",&n); getchar(); switch(n) { case 1:list();break; case 2:searchscore();break; case 3:creat();break; case 4:printf("本函数尚未定义!");break; case 5:searchnum();break; case 6:exit(0);break; default :printf("\n请选择1-6这几个数字!!!"); } }

}


----------------解决方案--------------------------------------------------------

creat函数只能创建记录而不能追加,我试着用了ftell函数来进行定位,但是失败了,追加记录

是加上了但是前面的记录全都重写了(值都变成了默认值),郁闷!有哪个朋友知道怎么追加还

请赐教啊!


----------------解决方案--------------------------------------------------------

我知道怎么不能追加了,creat函数里的文件打开方式错了,应该是fopen("C:\stud.ree","ab")以追加方式打开,然后配合 rewind(fp); fseek(fp,recnum*sizeof(node),0); 语句就可以了。 下面是正确的代码! # include "stdio.h" # include "string.h" # include "stdlib.h" # define NULL 0 # define MAX 5 # define TRUE 1

typedef struct node { char name[8]; int number; double score; }node;

static int recnum;

void creat() { char scorestr[100],ch,numstr[100]; node student; FILE *fp; if((fp=fopen("C:\stud.ree","ab"))==NULL) { printf("不能打开stud.ree!"); exit(0); } rewind(fp); fseek(fp,recnum*sizeof(node),0); do { printf("\n姓名:");gets(student.name); printf("\n学号:"); gets(numstr);student.number=atoi(numstr); printf("\n成绩:"); gets(scorestr);student.score=atof(scorestr); fwrite(&student,sizeof(node),1,fp); recnum++; printf("输入其他的学生记录:(y/n)?"); ch=getchar();getchar(); }while(ch=='y'); fclose(fp); }

void list() { node student; char scorestr[100],ch; FILE *fp; if((fp=fopen("C:\stud.ree","rb"))==NULL) {printf("不能打开stud.ree!"); return; } printf("\n下面是学生资料:\n"); printf(" 学号 姓名 成绩\n");

while(fread(&student,sizeof(node),1,fp)==1) { printf("%1d %s %6.2f\n",student.number,student.name,student.score); } fclose(fp); }

int totalrec() /*计算文件的记录数,用recnum表示总记录数*/ { node student; FILE *fp; recnum=0; if((fp=fopen("C:\stud.ree","rb"))==NULL) return 0; while(fread(&student,sizeof(node),1,fp)==1) { recnum++; } fclose(fp); return (recnum); }

searchnum() { node student; FILE *fp; int i=1; int num1; printf("\n请输入学号:"); scanf("%d",&num1); if((fp=fopen("C:\stud.ree","rb"))==NULL) {printf("不能打开stud.ree!"); return; } while(i<=recnum) { if(fread(&student,sizeof(node),1,fp)==1 && student.number==num1) { printf("\n 姓名: %s \n",student.name); printf("\n学号: %1d \n",student.number); printf("\n成绩: %6.2f\n",student.score); } i++; } fclose(fp); }

searchscore() { node student; FILE *fp; int i=1; double score1; printf("\n请输入成绩(小数点后保留2位):"); scanf("%lf",&score1); if((fp=fopen("C:\stud.ree","rb"))==NULL) {printf("不能打开stud.ree"); return; } while(i<=recnum) { if(fread(&student,sizeof(node),1,fp)==1 && student.score==score1) { printf("\n 姓名 : %s \n",student.name); printf("\n学号: %1d \n",student.number); printf("\n年龄: %6.2f\n",student.score); } i++; } fclose(fp); }

main() {int n; /*N为选择函数变量*/ clrscr(); gotoxy(10,10); printf("欢迎进入学生学籍管理系统"); gotoxy(10,12); printf("1:显示学生信息 2:成绩查找信息"); gotoxy(10,14); printf("3:添加学生信息 4:删除学生信息"); gotoxy(10,16); printf("5:学号查找信息 6:退出管理系统");

while(TRUE) { totalrec(); printf("\n当前文件的记录数是:%d",recnum); printf("\n请选择(1-6)"); scanf("%d",&n); getchar(); switch(n) { case 1:list();break; case 2:searchscore();break; case 3:creat();break; case 4:printf("本函数尚未定义!");break; case 5:searchnum();break; case 6:exit(0);break; default :printf("\n请选择1-6这几个数字!!!"); } }

}


----------------解决方案--------------------------------------------------------
  相关解决方案