C语言大作业,C语言高手们救下小弟啊```

各位高手位帮帮忙```
题目要求:
数据库 学生,成绩,记录,簿设计
编制一个C语言成绩记录簿,每个学生信息包括:学号、姓名、C语言成绩。具体功能:
(1)创建信息链表并以磁盘文件保存;
(2)读取磁盘文件并显示输出所有学生的成绩;
(3)按学号或姓名查询成绩;
(4)添加成绩记录;
(5)修改指定姓名或学号的学生的成绩并可存盘;
(6)显示输出60分以下、60~79、80~89、90分以上各分数段的学生信息

要用C语言来做,用C++不可以,因为我学的是C语言.最好是可以运行的,不用再作修改.还有就是最好在2月25号之前做好``````
麻烦各位高手了,感激不尽``````
如果不是和题目条件相符合的就尽量不要发了,这些我上网都可以找到的.尽量发一些基本一样的上来吧,特别是要有第6个功能.谢了`````

这是我在大学做过的课程设计,你看看:

/*
程序功能:
能完成每位学生的某门课程的平时成绩和期末考试成绩的录入,
完成每位学生的总评成绩计算(平时成绩*30%+期末考试成绩*70%)并生成数据文件,
生成分数段统计文件(不及格人数,60-69数,70-79人数,80-89人数,90-100人数,及格率),
通过学生成绩的数据文件查询学生成绩(查询条件自定)。
通过学生成绩的分段统计文件输出学生成绩分段情况和及格率。

程序要求:
(1)能够完成300人以内任何人数的成绩处理。
(2)程序要有主控菜单
*/

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct stud
{
long num;
char name[20];
double score;
};

typedef struct stucode
{
struct stud student ;
struct stucode *next;
}L;

void menu();
void createlist(struct stucode **r);
void out(struct stucode *r);
void search1(struct stucode *r);
void search2(struct stucode *r);
void del(struct stucode **r);
void insert(struct stucode **r);
void sort(struct stucode **r);

void main()
{
char choose;
int flag=1;
struct stucode *r=NULL;

while(flag)
{
system("cls");
menu();
choose=getchar();
switch(choose)
{
case '1':
createlist(&r);
out(r);
printf("Testing function 1\nPress any key to continue\n");
getchar();
getchar();
break;

case '2':
search1(r);
printf("Testing function 1\nPress any key to continue\n");
getchar();
getchar();
break;

case '3':
search2(r);
printf("Testing function 1\nPress any key to continue\n");
getchar();
getchar();
break;

case '4':
del(&r);
out(r);
printf("Testing function 1\nPress any key to continue\n");
getchar();
getchar();
break;

case '5':
insert(&r);
out(r);
printf("Testing function 1\nPress any key to continue\n");
getchar();
getchar();
break;

case '6':
sort(&r);
out(r);
printf("Testing function 1\nPress any key to continue\n");
getchar();
getchar();
break;

case '7':
out(r);
printf("Testing function 7\nPress any key to continue\n");
getchar();
getchar();
break;

case '0':
flag=0;
printf("The end.\n");
break;

default: printf("\nWrong Selection!(选择错误,请重选!)\n");getchar();getchar();
}
}
}

void createlist(struct stucode **r)
{
struct stucode *p,*t;
long n;
char a[20];
double s;
if(*r) *r=NULL;
printf(" \n请输入:\n 学号(请按学号升序排列) 姓名 分数 (若要结束请输入三个为零)\n");
scanf("%ld%s%lf",&n,a,&s);
if(n==0) return;

p=(L *)malloc(sizeof(L));
p->student.num=n;
strcpy(p->student.name,a);
p->student.score=s;
p->next=NULL;
*r=p;

scanf("%ld%s%lf",&n,a,&s);

while(n)
{
t=p;
p=(L *)malloc(sizeof(L));
p->student.num=n;
strcpy(p->student.name,a);
p->student.score=s;
p->next=NULL;
t->next=p;
scanf("%ld%s%lf",&n,a,&s);
}
}

void search1(struct stucode *r)
{
long x;
if(!r)
{
printf("没有学生信息可查询!\n");
return ;
}
printf(" 请输入要查询的学生信息的学生学号:\n");
scanf("%ld",&x);
while(r&&r->student.num!=x)
r=r->next;
if(r==NULL)
printf("Error! No such student !\n");
else
printf("%ld %s %.2lf\n",r->student.num,r->student.name,r->student.score);
}

void search2(struct stucode *r)
{
char m[20];
if(!r)
{
printf("没有学生信息可查询!\n");
return ;
}

printf(" 请输入要查询的学生信息的学生姓名:\n");
scanf("%s",m);
while(r&&strcmp(r->student.name,m))
r=r->next;
if(r==NULL)
printf("Error! No such student !\n");
else
printf("%ld %s %.2lf\n",r->student.num,r->student.name,r->student.score);
}

void del(struct stucode **r)
{
long k;
struct stucode *p=*r,*t;
if(!(*r))
{
printf("没有学生信息可删除 !\n");
return ;
}
printf(" 请输入要删除的学生信息的学生学号:\n");
scanf("%ld",&k);

if(p->student.num==k)
*r=(*r)->next,free(p);
else
{
while(p->next&&p->next->student.num!=k)
p=p->next;
if(p->next==NULL)
printf("Error! No such student !\n");
else
{
t=p->next;
p->next=p->next->next;
free(t);
}
}
}

void insert(struct stucode **r)
{
long n;
char a[20];
double s;

L *p,*t,*k;
printf(" 请输入要插入的学生信息的学生学号 姓名 分数:\n");
scanf("%ld%s%lf",&n,a,&s);
p=(L *)malloc(sizeof(L));
p->student.num=n;
p->student.score=s;
strcpy(p->student.name,a);
if(!(*r))
{
*r=p;
(*r)->next=NULL;
return ;
}
if(p->student.num<(*r)->student.num)
p->next=(*r),(*r)=p;
else
{
t=*r;
k=t;
while(t->next&&t->next->student.num<=p->student.num)
t=t->next;
p->next=t->next;
t->next=p;
*r=k;
}
}

void sort(struct stucode **r)
{
struct stucode *t,*p,*q,*z;
if(!r)
{
printf("没有学生信息可排序!\n");
return ;
}

if(!(*r)||!(*r)->next)
return;

t=*r;
p=t->next;
t->next=NULL;
while(p)
{
q=p->next;
if(p->student.score>t->student.score)
{
p->next=t;
t=p;
}
else
{
z=t;
while(z->next&&z->next->student.score>=p->student.score)
z=z->next;
p->next=z->next;
z->next=p;
}
p=q;
}
*r=t;
}

void out(struct stucode *r)
{
printf("\n\n");
if(!r)
{
printf("没有学生信息可输出!\n");
return ;
}

while(r)
{
printf("%ld %s %.2lf\n",r->student.num,r->student.name,r->student.score);
r=r->next;
}
printf("\n\n");
}

void menu()
{
printf("\n 学生信息管理系统\n");
printf("\n 菜单\n\n");
printf("\n 1建立链表并显示\n");
printf("\n 2查找某学号的学生信息\n");
printf("\n 3查找某姓名的学生信息\n");
printf("\n 4删除某学号的学生信息\n");
printf("\n 5插入新的学生信息\n");
printf("\n 6按分数降序排列输出\n");
printf("\n 7输出\n");
printf("\n 0退出\n");

printf("\n 请选择您要执行的选项:\n");
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-01-30
/***************Score.h******************/

#ifndef _SCORE_H
#define _SCORE_H

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <process.h>

#define N 10
#define STUDENT_COUNT 50 //学生数
#define LESSON_COUNT 3 //课程数

#define SUM_SORT 9
#define MATH_SORT 0
#define ENGLISH_SORT 1
#define COMPUTER_SORT 2
#define SUM_STATISTICS 4
#define MATH_STATISTICS 5
#define ENGLISH_STATISTICS 6
#define COMPUTER_STATISTICS 7
#define SEARCH 8

typedef struct _Student
{
char id[N]; //学号
char name[N]; //姓名
int score[LESSON_COUNT]; //成绩
int sum; //总分
}Student;

void swap(Student *stu1, Student *stu2);
int cmp(char a[N], char b[N]);
void Sort(Student stu[] , int count , int lessonId);
int Search(Student stu[] , int count, char studentId[10], Student * student);
int Sum(int score[] , int count);
int Menu();
void ReadData(Student stu[] , int count);

#endif

/****************Main.c*********************/

#include "Score.h"

void main()
{
Student stu[STUDENT_COUNT];
Student s;
int menuitem;
int i ;
int k = 0;
char n[10]={'\0'};

//清屏
system("cls");
//读入学生信息
ReadData(stu, STUDENT_COUNT);

//计算学生总成绩
for (i=0; i<STUDENT_COUNT; i++)
stu[i].sum = Sum(stu[i].score,3);

while(1)
{
//显示功能菜单,并获得选择的菜单项
menuitem = Menu();

switch(menuitem)
{
//按总分排序
case SUM_SORT:
{
Sort(stu, STUDENT_COUNT, SUM_SORT);
printf ("Id\t\tName\tMath\tEnglish\tComputer Sum\n");
for (i=0; i<STUDENT_COUNT; i++)
printf ("%s\t%s\t%d\t%d\t%d\t %d\n",stu[i].id,stu[i].name ,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum);
getchar();
break;
}

//按数学成绩排序
case MATH_SORT:
{
Sort(stu, STUDENT_COUNT, MATH_SORT);
printf ("Id\t\tName\tMath\tEnglish\tComputer Sum\n");
for (i=0; i<STUDENT_COUNT; i++)
printf ("%s\t%s\t%d\t%d\t%d\t %d\n",stu[i].id,stu[i].name ,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum);
getchar();
break;
break;
}

//按英语成绩排序
case ENGLISH_SORT:
{
Sort(stu, STUDENT_COUNT, ENGLISH_SORT);
printf ("Id\t\tName\tMath\tEnglish\tComputer Sum\n");
for (i=0; i<STUDENT_COUNT; i++)
printf ("%s\t%s\t%d\t%d\t%d\t %d\n",stu[i].id,stu[i].name ,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum);
getchar();
break;
break;
}

//按计算机成绩排序
case COMPUTER_SORT:
{
Sort(stu, STUDENT_COUNT, COMPUTER_SORT);
printf ("Id\t\tName\tMath\tEnglish\tComputer Sum\n");
for (i=0; i<STUDENT_COUNT; i++)
printf ("%s\t%s\t%d\t%d\t%d\t %d\n",stu[i].id,stu[i].name ,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum);
getchar();
break;
break;
}

//统计数学成绩不及格人数
case MATH_STATISTICS:
{
k=0;
Sort(stu, STUDENT_COUNT, MATH_SORT);
for (i=0; i<STUDENT_COUNT; i++)
if (stu[i].score[0]<60)
break;
for (;i<STUDENT_COUNT; i++)
printf ("%d\t%s\t%s\t%d\n",k++,stu[i].id,stu[i].name,stu[i].score[0]);
getchar();
break;
}

//按英语成绩统计
case ENGLISH_STATISTICS:
{
k=0;
Sort(stu, STUDENT_COUNT, ENGLISH_SORT);
for (i=0; i<STUDENT_COUNT; i++)
if (stu[i].score[1]<60)
break;
for (;i<STUDENT_COUNT; i++)
printf ("%d\t%s\t%s\t%d\n",k++,stu[i].id ,stu[i].name,stu[i].score[1]);
getchar();
break;
}

//按计算机成绩统计
case COMPUTER_STATISTICS:
{
k=0;
Sort(stu, STUDENT_COUNT, COMPUTER_SORT);
for (i=0; i<STUDENT_COUNT; i++)
if (stu[i].score[2]<60)
break;
for (;i<STUDENT_COUNT; i++)
printf ("%d\t%s\t%s\t%d\n",k++,stu[i].id,stu[i].name,stu[i].score[2]);
getchar();
break;
}

//按学号搜索学生,并显示学生成绩
case SEARCH:
{
printf ("Please enter an ID:");
scanf ("%s",n);
if (Search(stu,STUDENT_COUNT,n,&s))
{
printf ("Id\t Name\tMath\tEnglish\tComputer Sum\n");
printf ("%s %s\t%d\t%d\t%d\t %d",s.id,s.name,s.score [0],s.score [1],s.score [2],s.sum);
getchar();
}
else
{
printf ("No such student! %s\n",n);
getchar();
}
break;
}

}
printf("\nPress AnyKey to Continue... ");
getchar();
}
}

/*****************Menu.c******************/

#include "Score.h"

//显示功能菜单,返回选择的菜单项
int Menu()
{
int menuitem ;
int item;
while(1)
{
menuitem = -1;
item = -1;
while ( menuitem != 0 && menuitem != 1 && menuitem != 2 && menuitem != 3 )
{
system("cls");
printf("\n\t\t Main Menu\n") ;
printf("\n\t\t1. Sort\n");
printf("\t\t2. Statistics\n");
printf("\t\t3. Search\n");
printf("\t\t0. Exit\n\n");
printf("\tPlease choose an item(0-3):");
scanf("%d",&menuitem);
if (menuitem == 0 || menuitem == -1) exit(0);
}
switch(menuitem)
{
case 1:
{
while(item != 0 && item != 1 && item != 2 && item != 3 && item != 4)
{
system("cls");
printf("\n\t\t Sort Menu\n");
printf("\n\t\t1. Sort by Math score\n");
printf("\t\t2. Sort by English score\n");
printf("\t\t3. Sort by Computer score\n");
printf("\t\t4. Sort by Sum score\n");
printf("\t\t0. return\n\n");
printf("\tPlease choose an item(0-4):");
scanf("%d",&item);
if (item == 0 || item == -1) break;
}

switch(item)
{
case 1:
return MATH_SORT;
case 2:
return ENGLISH_SORT;
case 3:
return COMPUTER_SORT;
case 4:
return SUM_SORT;
}
break;
}
case 2:
{
while(item != 0 && item != 1 && item != 2 && item != 3 && item != 4)
{
system("cls");
printf("\n\t\t Statitics Menu\n");
printf("\n\t\t1. Statitics by Math score\n");
printf("\t\t2. Statitics by English score\n");
printf("\t\t3. Statitics by Computer score\n");
printf("\t\t0. return\n\n");
printf("\tPlease choose an item(0-4):");
scanf("%d",&item);
if (item == 0) break;
}

switch(item)
{
case 1:
return MATH_STATISTICS;
case 2:
return ENGLISH_STATISTICS;
case 3:
return COMPUTER_STATISTICS;
case 4:
return SUM_STATISTICS;
}
break;
}
case 3:
{
return SEARCH;
}
}
}
}

/**************ReadData.c******************/

#include "Score.h"
void ReadData(Student stu[] , int count)
{
FILE *fp;
int i;
char ch[10];
if((fp = fopen("Score.dat","r")) == NULL)
{
printf("\tCan't open the file: Score.dat.\n\tPress AnyKey to Exit... ");
getchar();
exit(0);
}
fscanf(fp,"%s%s%s%s%s",ch,ch,ch,ch,ch);
for(i = 0 ; i < count ; i++)
fscanf(fp,"%s %s%d%d%d",stu[i].id,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
}

/***************code.c****************/

#include "Score.h"
void swap(Student *stu1, Student *stu2)
{
int temp;
char s[N];

strcpy(s,(*stu1).id);
strcpy((*stu1).id , (*stu2).id);
strcpy((*stu2).id,s);

strcpy(s,(*stu1).name );
strcpy((*stu1).name,(*stu2).name );
strcpy((*stu2).name, s);

temp = (*stu1).score [0];
(*stu1).score [0] = (*stu2).score[0];
(*stu2).score[0] = temp;

temp = (*stu1).score [1];
(*stu1).score [1] = (*stu2).score[1];
(*stu2).score[1] = temp;

temp = (*stu1).score [2];
(*stu1).score [2] = (*stu2).score[2];
(*stu2).score[2] = temp;

temp = (*stu1).sum ;
(*stu1).sum = (*stu2).sum;
(*stu2).sum = temp;
}
int cmp(char a[N], char b[N])
{
int i = 0;
for (i=0; i<9; i++)
if (a[i]!=b[i])
return 0;
return 1;
}

/************************************************************************************************/
//Sort function
//功能:排序
//参数:Student stu[]
// int count:要排序的学生数目
// int lessonId:要排序的课程编号
// 数学:MATH_SORT; 英语:ENGLISH_SORT;计算机:COMPUTER_SORT;总分:SUM_SORT
/************************************************************************************************/
void Sort(Student stu[] , int count , int lessonId)
{
int i,k;

if (lessonId == SUM_SORT)//sort by sum
{
for (i=0; i<count-1; i++)
for (k = i+1; k<count; k++)
{
if (stu[i].sum < stu[k].sum )
{
swap(&stu[i],&stu[k]);//swap
}
}
}

else
{
for (i=0; i<count-1; i++)
for (k = i+1; k<count; k++)
{
if (stu[i].score[lessonId] < stu[k].score[lessonId] )
{
swap(&stu[i],&stu[k]);//sweet
}
}
}
}

/************************************************************************************************/
//功能:按学号搜索学生
//参数:Student stu[]
// int count:学生数目
// int lessonId:要搜索的学号
// Student * student: 搜索到的学生
//返回值:如果搜索到的学生返回1,否则返回0
/************************************************************************************************/
int Search(Student stu[] , int count, char studentId[10], Student * student)
{
int i;
int state = 0;

for (i=0; i<STUDENT_COUNT; i++)
if (cmp(stu[i].id,studentId))
{
strcpy((*student).id,stu[i].id);
strcpy((*student).name,stu[i].name );
(*student).score[0] = stu[i].score [0];
(*student).score[1] = stu[i].score [1];
(*student).score[2] = stu[i].score [2];
(*student).sum = stu[i].sum;
return 1;
}
return 0;
}

/************************************************************************************************/
//功能:计算所有课程的总分
//参数:Student stu[]
// int count:学科数目
//返回值:总分
/************************************************************************************************/
int Sum(int score[] , int count)
{
int sum = 0;
while (count >0)
sum += score[--count];
return sum;
}
第2个回答  2008-01-30
上面这位哥们儿,我把你的代码拷走了哈……
谢谢了!!真厉害!
第3个回答  2008-02-04
上面的程序符合 以磁盘文件保存 吗?
第4个回答  2008-02-10
貌似这个问题是实现EXCEL的功能
相似回答