用C语言设计一个学生成绩管理系统

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用C语言设计一个学生成绩管理系统相关的知识,希望对你有一定的参考价值。

功能:有N(N >= 5)个学生的数据信息,每个包含:
学号 — num [10](字符串)、
姓名(拼音)— name[25](字符串)、
性别 — sex(字符,M或F)、
年龄 — age(整型)、
三门课程成绩(高数、英语、计算机)— score [3 ](单精度)。
设计一个系统,完成下列功能:
1. 定义及输出。用结构体类型数据及其赋初值的方法把学生的数据送到结构体数组中(第一个数据用自己的真实数据,其它数据自定,但注意要有符合第4个功能两项统计输出的数据。),然后把它们打印出来。
2. 计算并排序。计算每个学生三门课程的总分(sum,单精度)及平均分(aver,单精度,输出一位小数),将包括所有数据的结构体数组元素按总分从大到小的顺序排序打印出来。
3. 查找。任意输入一位学生的姓名,打印出他的所有数据。要求能多次查找。
4. 统计。统计输出不及格的学生名单和对应的课程。

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

#include <stdlib.h>
#define MAX 1000

/*定义学生成绩信息结构*/
struct stu

char id[8];
char name[8];


扩展资料:

short:修饰int,短整型数据,可省略被修饰的int。(K&R时期引入)

long:修饰int,长整型数据,可省略被修饰的int。(K&R时期引入)

long long:修饰int,超长整型数据,可省略被修饰的int。(C99标准新增)

signed:修饰整型数据,有符号数据类型。(C89标准新增)

unsigned:修饰整型数据,无符号数据类型。(K&R时期引入)

restrict:用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式。(C99标准新增)

复杂类型关键字

struct:结构体声明。(K&R时期引入)

union:联合体声明。(K&R时期引入)

enum:枚举声明。(C89标准新增)

typedef:声明类型别名。(K&R时期引入)

sizeof:得到特定类型或特定类型变量的大小。(K&R时期引入)

inline:内联函数用于取代宏定义,会在任何调用它的地方展开。(C99标准新增)

参考资料来源:百度百科-c语言

参考技术A 参考代码如下,不过还是建议自己写一写比较好:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct student //结构体

char name[20]; //姓名
char number[20]; //学号
double math; //数学
double english; //英语
double chinese; //语文
double program; //程序
s[50];

void head() //界面

printf(
"**********************************************************************\n"
"** **\n"
"** **\n"
"** 学生成绩管理系统 **\n"
"** **\n"
"** 1.信息录入 **\n"
"** 2.信息统计 **\n"
"** 3.信息浏览 **\n"
"** 4.信息查询 **\n"
"** 5.信息排序 **\n"
"** 6.信息删除 **\n"
"** 0.退出系统 **\n"
"** **\n"
"**********************************************************************\n"
);

void daoru(struct student s[], int* n) //文件导入函数

FILE *p;
int i=*n;
if((p=fopen("数据.txt", "r"))==NULL)

n=n;

else

while(!feof(p))

fscanf(p, "%s%s%lf%lf%lf%lf\n", s[i].name, s[i].number, &s[i].math, &s[i].english, &s[i].chinese, &s[i].program);
i++;
*n=*n+1;


fclose(p);

void daochu(struct student s[], int n)

FILE *p;
int i=0;
if((p=fopen("数据.txt", "w"))==NULL)

printf("无法打开此文件!");

else

while(i<n-1)

fprintf(p, "%s %s %lf %lf %lf %lf\n", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program);
i++;

fprintf(p, "%s %s %lf %lf %lf %lf", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program);

fclose(p);

void dayin(struct student s[], int n) //显示所有信息

int i;
double all=0.0;
printf("\n姓名\t\t学号\t\t数学\t英语\t语文\t程序\t总分\n");
for (i=0; i<n; i++)

all=s[i].math+s[i].english+s[i].chinese+s[i].program;
printf("%s\t\t%s\t\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program, all);


void shuru(struct student s[], int* n) //信息输入函数

int i=*n, j, k, m;
printf("请输入学生姓名:");
scanf("%s", s[i].name);
printf("请输入学生学号:");
for (j=0; ; j++)

m=0;
scanf("%s", s[i].number);
for (k=0; k<i; k++)

if (strcmp(s[i].number, s[k].number)==0)

m=m+1;
printf("学号重复,请重新输入学号:");
break;


if (m==0)

break;


printf("请输入数学成绩:");
scanf("%lf", &s[i].math);
printf("请输入英语成绩:");
scanf("%lf", &s[i].english);
printf("请输入语文成绩:");
scanf("%lf", &s[i].chinese);
printf("请输入程序成绩:") ;
scanf("%lf", &s[i].program);
printf("添加信息成功!\n");
*n=*n+1;
daochu(s, *n);

void paixu(struct student s[], int n) //排序函数

int i, j;
double all1, all2;
struct student stu;
for (i=0; i<n-1; i++)

for (j=i+1; j<n; j++)

all1=s[i].math+s[i].english+s[i].chinese+s[i].program;
all2=s[j].math+s[j].english+s[j].chinese+s[j].program;
if (all1<all2)

stu=s[i];
s[i]=s[j];
s[j]=stu;



printf("排序后的数据:\n");
dayin(s, n);

void chazhao(struct student s[], int n) //查找函数

char name[20], num[20];
int m1, m2=0, i, j;
printf("1.按姓名查找\n2.按学号查找\n选择查询方式(1或2):");
scanf("%d", &m1);
if (m1==1)

printf("请输入您要查找的学生姓名:");
scanf("%s", name);
for (i=0; i<n; i++)

if (strcmp(s[i].name, name)==0)

m2=m2+1;
if (m2==1)

printf("\n姓名\t\t学号\t数学\t英语\t语文\t程序\n");

printf("%s\t\t%s\t\t%s\t\t%s\t\t%s\n", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program);


if (m2==0)

printf("没有此学生信息!\n");


else if (m1==2)

printf("请输入您要查找的学生学号:");
scanf("%s", num);
j=0;
for (i=0; i<n; i++)

if (strcmp(s[i].number, num)==0)

m2=m2+1;
if (m2==1)

printf("\n姓名\t\t学号\t数学\t英语\t语文\t程序\n");

printf("%s\t\t%s\t\t%s\t\t%s\t\t%s\n", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program);


if (m2==0)

printf("没有此学生信息!\n");



void shanchu(struct student s[], int* n) //删除函数

char num[20];
int m=0, i, j;
printf("请输入您要删除的学生学号:");
scanf("%s", num);
for (i=0; i<=*n; i++)

if (strcmp(s[i].number, num)==0)

m=m+1;
for (j=i; j<*n; j++)

s[j]=s[j+1];

*n=*n-1;


if (m==0)

printf("没有此学生信息!\n");

else

daochu(s, *n);
printf("删除完毕!\n");


void allAndAver(struct student s[], int n)

int i ;
double all=0.0, aver=0.0;
for (i=0; i<n; i++)

all=s[i].math+s[i].english+s[i].chinese+s[i].program;
aver=all/4;
printf("%s\t\t%s\t\t%.1lf\t%.1lf\n", s[i].name, s[i].number, all, aver);


void Fail(struct student s[], int n) //统计单科不及格人数

int i, fail[4]=0;
for (i=0; i<n; i++)

if (s[i].math<60)

fail[0]++;

if (s[i].english<60)

fail[1]++;

if (s[i].chinese<60)

fail[2]++;

if (s[i].program<60)

fail[3]++;


printf("\n不及格信息:\n");
printf("数学不及格的人数为:%d人\n", fail[0]);
printf("英语不及格的人数为:%d人\n", fail[1]);
printf("语文不及格的人数为:%d人\n", fail[2]);
printf("程序不及格的人数为:%d人\n", fail[3]);

void Max(struct student s[], int n) //统计单科最高分人数

int i, counter[4]=0;
double max[4]=s[0].math, s[0].english, s[0].chinese, s[0].program;
for (i=0; i<n; i++)

if (s[i].math>max[0])

max[0]=s[i].math;

if (s[i].math>max[1])

max[1]=s[i].math;

if (s[i].math>max[2])

max[2]=s[i].math;

if (s[i].math>max[3])

max[3]=s[i].math;


for (i=0; i<n; i++)

if (s[i].math==max[0])

counter[0]++;

if (s[i].math==max[1])

counter[1]++;

if (s[i].math==max[2])

counter[2]++;

if (s[i].math==max[3])

counter[3]++;


printf("\n最高分信息:\n");
printf("数学最高分为:%.1lf, 人数为:%d人\n", max[0], counter[0]);
printf("英语最高分为:%.1lf, 人数为:%d人\n", max[1], counter[1]);
printf("语文最高分为:%.1lf, 人数为:%d人\n", max[2], counter[2]);
printf("程序最高分为:%.1lf, 人数为:%d人\n", max[3], counter[3]);

void Min(struct student s[], int n) //统计单科最低分人数

int i, counter[4]=0;
double min[4]=s[0].math, s[0].english, s[0].chinese, s[0].program;
for (i=0; i<n; i++)

if (s[i].math<min[0])

min[0]=s[i].math;

if (s[i].math<min[1])

min[1]=s[i].math;

if (s[i].math<min[2])

min[2]=s[i].math;

if (s[i].math<min[3])

min[3]=s[i].math;


for (i=0; i<n; i++)

if (s[i].math==min[0])

counter[0]++;

if (s[i].math==min[1])

counter[1]++;

if (s[i].math==min[2])

counter[2]++;

if (s[i].math==min[3])

counter[3]++;


printf("\n最低分信息:\n");
printf("数学最低分为:%.1lf, 人数为:%d人\n", min[0], counter[0]);
printf("英语最低分为:%.1lf, 人数为:%d人\n", min[1], counter[1]);
printf("语文最低分为:%.1lf, 人数为:%d人\n", min[2], counter[2]);
printf("程序最低分为:%.1lf, 人数为:%d人\n", min[3], counter[3]);

void tongji(struct student s[], int n) //统计函数

printf("统计信息如下:\n");
printf("\n姓名\t\t学号\t\t总分\t平均分\n");
allAndAver(s, n);
Max(s, n);
Min(s, n) ;
Fail(s, n);

int main() //主函数

int k, n=0;
daoru(s, &n);
daochu(s, n);
while (1)

head();
printf("\n请按对应的键选择相应的功能:");
scanf("%d",&k);
switch (k)

case 1:
shuru(s, &n);
break;
case 2:
tongji(s, n);
break;
case 3:
dayin(s, n);
break;
case 4:
chazhao(s, n);
break;
case 5:
paixu(s, n);
break;
case 6:
shanchu(s, &n);
break;
case 0:
exit(1);
break;
default : printf("请输入正确的命令!\n");

system("pause");
system("cls");

return 0;
参考技术B #include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 1000

/*定义学生成绩信息结构*/
struct stu

char id[8];
char name[8];
double Chinese;
double Math;
double English;
double average;
double total;
;

/*学生结构数组,用于存储学生成绩信息*/
struct stu students[MAX];
/*当前学生人数*/
int current;

void input()

int i;

printf("请输入学生人数:");
scanf("%d", & current);
for (i = 0; i < current; i++)

printf("\n请输入学生学号,最多为7位数: ");
scanf("%s", students[i].id);
printf("请输入学生姓名:");
scanf("%s", students[i].name);
printf("请输入语文成绩:");
scanf("%lf", &students[i].Chinese);
printf("请输入数学成绩:");
scanf("%lf", &students[i].Math);
printf("请输入英语成绩:");
scanf("%lf", &students[i].English);
students[i].total = students[i].Chinese + students[i].Math + students[i].English;
students[i].average = students[i].total / 3;



/*排名次,即对学生结构数组排序*/
void sort(struct stu array[], int n)

int i, j;
struct stu temp;

for (i = 0; i < n; i++)

for (j = i+1; j < n; j++)

if (array[i].average - array[j].average < 1e-16)

temp = array[i];
array[i] = array[j];
array[j] = temp;





/*统计平均成绩,并输出各分数段的人数*/
void print_score(struct stu array[], int n)

int i;
double ave = 0;
int sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0;

for (i = 0; i < n; i++)

ave += array[i].average;
switch ((int)(array[i].average / 10))

case 10:
case 9: sum1++; break;
case 8: sum2++; break;
case 7:
case 6: sum3++; break;
default: sum4++;


printf("全班的平均分为:%.1f\n", ave/n);
printf("平均分在90分以上的人数为:%d\n", sum1);
printf("平均分在80~89的人数为:%d\n", sum2);
printf("平均分在60~79的人数为:%d\n", sum3);
printf("平均分在60分以下的人数为:%d\n", sum4);


/*输出不及格科目及学生名单*/
void print_unreach(struct stu array[], int n)

int i;

printf("科目\t学号\t名字\n");
for (i = 0; i < n; i++)

if (array[i].Chinese < 60)

printf("语文\t%s\t%s\n", array[i].id, array[i].name);

if (array[i].Math < 60)

printf("数学\t%s\t%s\n", array[i].id, array[i].name);

if (array[i].English < 60)

printf("英语\t%s\t%s\n", array[i].id, array[i].name);




/*打印优等生名单*/
void print_good(struct stu array[], int n)

int i;
char mark = 0;

if (n > 3)

n = 3;

printf("学号\t姓名\t语文\t数学\t英语\t平均分\t名次\n");
for (i = 0; i < n; i++)

if ((array[i].Chinese > 60) && (array[i].Math > 60) && (array[i].English > 60))

if (array[i].average > 90) mark = 1;
else if (array[i].average > 85)

if (array[i].Chinese == 100) mark = 1;
if (array[i].Math == 100) mark = 1;
if (array[i].English == 100) mark = 1;
if (array[i].Chinese > 95 && array[i].English > 95) mark = 1;
if (array[i].Chinese > 95 && array[i].Math > 95) mark = 1;
if (array[i].Math > 95 && array[i].English > 95) mark = 1;

if (mark == 1)

printf("%s\t%s\t", array[i].id, array[i].name);
printf("%.f\t%.f\t%.f\t%.1f\t", array[i].Chinese, array[i].Math, array[i].English, array[i].average);
printf("%d\n", i+1);





/*按学生姓名查询成绩*/
void search_name(struct stu array[], int n, char* name)

int i;
char mark = 1;

for (i = 0; i < n; i++)

if (strcmp(name, array[i].name) == 0)

printf("学生姓名:%s\n", name);
printf("学生学号:%s\n", array[i].id);
printf("语文:%.f\n", array[i].Chinese);
printf("数学:%.f\n", array[i].Math);
printf("英语:%.f\n", array[i].English);
printf("平均分:%.1f\n", array[i].average);
mark = 0;



if (mark == 1) puts("不存在该学生记录");


/*按学生学号查询成绩*/
void search_id(struct stu array[], int n, char* id)

int i;
char mark = 1;

for (i = 0; i < n; i++)

if (strcmp(id, array[i].id) == 0)

printf("学生姓名:%s\n", array[i].name);
printf("学生学号:%s\n", array[i].id);
printf("语文:%.f\n", array[i].Chinese);
printf("数学:%.f\n", array[i].Math);
printf("英语:%.f\n", array[i].English);
printf("平均分:%.1f\n", array[i].average);
mark = 0;
break;


if (mark == 1) puts("不存在该学生记录");


void print_menu()

system("cls");
printf("1.输入学生信息\n");
puts("2.统计全班学生成绩");
puts("3.按学号查询学生成绩");
puts("4.按姓名查询学生成绩");
puts("5.输出不及格情况");
puts("6.输出优等生名单");
puts("0.退出本程序");
printf("\n\n 请输入你的选择:");


int main(int argc, char **argv)

char ch = 0;
char id[8], name[8];

while (ch != '0')

print_menu();
ch = getchar();
switch (ch)

case '1':

system("cls");
input();
sort(students, current);
break;

case '2':

system("cls");
print_score(students, current);
break;

case '3':

system("cls");
printf("请输入学号:");
scanf("%s", id);
search_id(students, current, id);
break;

case '4':

system("cls");
printf("请输入姓名:");
scanf("%s", name);
search_name(students, current, name);
break;

case '5':

system("cls");
print_unreach(students, current);
break;

case '6':

system("cls");
print_good(students, current);
break;

case '0': exit(0);

printf("\n\n按任意键返回主菜单……");
getchar();
getchar();

return 0;
本回答被提问者采纳
参考技术C 去年写的,你稍微改下加个成绩就行

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
FILE *fp;
struct student
char name[10];
char number[12];
char age[3];
struct student *next;
;
struct student *creat(); //手动创建链表
struct student *build_list(); //从文件读取信息创建链表
void read_list(struct student *head); //打印链表
void search(struct student *head); //查找相应信息
struct student *delete_(struct student *head); //删除相应信息
void ad_list(struct student *head); //增加信息
int control(struct student *head); //控制函数
void head_print(); //打印界面函数
void change_list(struct student *head); //更改链表信息函数
void save(struct student *head); //保存文件
void remove(struct student *head); //递归释放链表空间
char name[10],number[12],age[3]; //学生姓名、学号、年龄全局变量
int main()
struct student *head;
head=(struct student*)malloc(sizeof(struct student));
control(head);
free(head);
fclose(fp);
return 0;

struct student *creat()
struct student *head;
char name[10],number[12],age[3];
struct student *p,*r,*p1;
head=(struct student *)malloc(sizeof(struct student));
p=head->next;
r=head;
printf("依次输入姓名学号年龄(按q退出):\n");
scanf("%s",name);
while(name[0]!='q')
p1=(struct student*)malloc(sizeof(struct student));
scanf("%s",number);
scanf("%s",age);
strcpy(p1->name,name);
strcpy(p1->number,number);
strcpy(p1->age,age);
p1->next=NULL;
r->next=p1;
r=p1;
scanf("%s",name);

printf("建立成功\n");

return head;

/*若无文件或文件为空,用链表创建函数,为防止占用多余内存在循环入口处进行判断,函数返回头指针地址*/
struct student *build_list()
char ch;
struct student *head;
struct student *p1,*r;
rewind(fp);
head=(struct student*)malloc(sizeof(struct student));
r=head;
while(!feof(fp))
p1=(struct student*)malloc(sizeof(struct student));
fscanf(fp,"%s%s%s",p1->name,p1->number,p1->age);
p1->next=NULL;
r->next=p1;
r=p1;
fseek(fp,2L,SEEK_CUR);
if((ch=getc(fp))==EOF)
break;
else
fseek(fp,-3L,SEEK_CUR);

return head;

/*文件内有信息时按行读取文件信息并创建链表,为防止误读结尾换行符,用fseek函数在每次循环后移两单位判断是否为空
,若为空结束循环,若不为空则用fseek函数前移三个单位*/
void read_list(struct student *head)
struct student *p;
p=head->next;
if(p==NULL)
head=creat();

printf("*******************************************\n");
while(p!=NULL)
printf("%-20s%-12s%-3s\n",p->name,p->number,p->age);
p=p->next;

printf("*******************************************\n");

/*输出链表信息,如果进行删除操作后链表为空则转到链表创建函数;按行读取文件信息并输出。*/
void search(struct student *head)
char s[20];
struct student *p;
int k=0;
printf("请输入要查询的字符串:\n");
p=head->next;
scanf("%s",s);
printf("查询结果:\n");
while(p!=NULL)
if((strcmp(s,p->age)&&strcmp(s,p->name)&&strcmp(s,p->number))==0)
printf("%-20s%-12s%-3s\n",p->name,p->number,p->age);
k=1;

p=p->next;

if(k==0)
printf("无记录\n");

/*查找函数,*/
struct student *delete_(struct student *head)
char s[20];
char ch;
int v=0;
struct student *p,*q;
printf("请输入要删除的学生的学号:\n");
scanf("%s",s);
p=head->next;
q=head;
while(p!=NULL)
if(strcmp(s,p->number)==0)
q->next=p->next;
v=1;
free(p);
break;

q=p;
p=p->next;

if(v==1)
printf("删除成功\n");
else
printf("未删除成功\n");
return q->next;

if(head->next==NULL)
printf("已无信息,是否输入新的(Y/N):\n");
scanf("%c",&ch);
ch=getchar();
if(ch=='y')
head=creat();
return head;

return q->next;

void ad_list(struct student *head)
char s[20];
int v=0;
struct student *p,*q;
q=(struct student *)malloc(sizeof(struct student));
p=head->next;
printf("插在学号为多少的学生后?\n");
scanf("%s",s);
while(p!=NULL)
if(strcmp(s,p->number)==0)
printf("请输入学生信息(姓名 学号 年龄):\n");
scanf("%s%s%s",q->name,q->number,q->age);
q->next=p->next;
p->next=q;
v=1;
break;

p=p->next;

if(v==0)
printf("插入失败\n");

void change_list(struct student *head)
char s1[12];
char ch;
struct student *p;
printf("请输入要更改的学生的学号:\n");
scanf("%s",s1);
p=head->next;
while(p!=NULL)
if(strcmp(s1,p->number)==0)
break;
p=p->next;

printf("请输入要更改的内容:\na.姓名\nb.学号\nc.年龄\n");
scanf("%c",&ch);
ch=getchar();
printf("请输入更改后结果:\n");
scanf("%s",s1);
switch(ch)
case'a':strcpy(p->name,s1);break;
case'b':strcpy(p->number,s1);break;
case'c':strcpy(p->age,s1);break;


void save(struct student *head)
struct student *p;
p=head->next;
fp=fopen("stu.out","w+");
rewind(fp);
while(p!=NULL)
fprintf(fp,"%-20s%-12s%3s\n",p->name,p->number,p->age);
p=p->next;

printf("保存成功\n");

void remove(struct student *head)
if(head==NULL)
return;
remove(head->next);
free(head);

int control(struct student *head)
int i=0;
char ch;
head_print();
if((fp=fopen("stu.out","r"))==NULL)
printf("无文件,请先建立:\n");
head=creat();

else if((ch=getc(fp))==EOF)
printf("无信息,请先建立:\n");
head=creat();

else
head=build_list();
while((ch=getchar())!='q')
switch(ch)
case'a':search(head);break;
case'b':delete_(head);break;
case'c':ad_list(head);break;
case'd':change_list(head);break;
case'e':read_list(head);break;
case'f':save(head);break;
case'h':head_print();


if(ch=='q')
remove(head);
return 0;

void head_print()
printf("%13.0s********************************************%13.0s\n");
printf("%13.0s**%40.0s**\n");
printf("%13.0s**%9.0sa.查找%9.0sb.删除%10.0s**\n");
printf("%13.0s**%40.0s**\n");
printf("%13.0s**%9.0sc.增加%9.0sd.更改%10.0s**\n");
printf("%13.0s**%40.0s**\n");
printf("%13.0s**%9.0se.查看%9.0sf.存档%10.0s**\n");
printf("%13.0s**%40.0s**\n");
printf("%13.0s**%9.0s按h显示提示信息,q退出%10.0s**\n");
printf("%13.0s********************************************%13.0s\n");
参考技术D 看你要做多好了。简单的就是成绩录入与查询,角色大概分为教师、学生、管理员。想做NB的,不仅是成绩录入与输出,还可以做查询统计报表,对各个成绩段、年级段、时间段等条件进行统计,生成柱状图饼状图,对于老师成绩上传发出过期提醒等等人性化操作。。

c语言学生成绩管理系统设计

设计要求:
学生成绩信息包括:学期,学号,班别,姓名,四门课程成绩(语文、数学、英语和计算机)等。
主要功能:
(1) 能按学期、按班级完成对学生成绩的录入、修改
(2) 能按班级统计学生的成绩,求学生的总分及平均分
(3) 能查询学生成绩,不及格科目及学生名单
(4) 能按班级输出学生的成绩单
要求:使用二进制文件方式存储数据,系统以菜单方式工作

我这有个学生成绩管理系统的c程序 是去年我们的设计题目给你参考一下啦 感觉都一个样了基本相同 这个设计嘛 还是要自己写的 只有这样才可以学好c的,而且c语言很有用的是语言学的基础。你肯定是工科的学生吧,这样就跟重要了,像人家清华大学的c语言课就三节一学期下来,到后来每个人都有几个这样的课程设计题目,好几百行的他们都能编出来,不是他们聪明,当然肯定不笨了...所以啊都是个氛围和兴趣的问题了。多参考参考是对的,在图书馆借几本相关的书籍看看,上网查查,但不要复制别人的就可以了.....

这个给你参考一下吧
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<string.h>

typedef struct STUDENT

char studentNumber[10];/*学生学号*/
char studentName[20];/*学生姓名*/
char className[20];/*班级名称*/
float mark1;/*第1门成绩*/
float mark2;/*第2门成绩*/
float mark3;/*第3门成绩*/
struct STUDENT *next;
STUDENT;
STUDENT *headLink;/*链表表头指针*/
/*以下是函数声明*/
void ReadInfoFormFile(void);
void DesplayMenu(void);
void CreateHeadLink(void);
STUDENT *MallocNode(void);
void GetInformation(STUDENT *t);
void OutputInformation(void);
void DesplayInfoBystudentName(void);
void DesplayInfoBystudentNumber(void);
void DesplayOneNode(STUDENT *t);
void InsertOneNode(STUDENT *t);
void DeleteNodeBystudentNumber(void);
void ChangeMarkByName(void);
void ChangeMarkByNumber(void);
void SaveLinkToFile(void);
void DesplayMarkSegment(void);
void CompositorByTotalMark(void);
int choose;/*用于接受用户的选择*/
/*主函数*/
main()

CreateHeadLink();
ReadInfoFormFile();
DesplayMenu();

/************************************
函数功能:从文件中读学生信息到链表中
************************************/
void ReadInfoFormFile(void)

FILE *fp;
STUDENT *p;
fp=fopen("student.txt","r");
if(!fp)

printf("文件不存在\n");
return;

p=MallocNode();
while(fscanf(fp,"%s%s%s%f%f%f",p->studentNumber,p->studentName,p->className,&(p->mark1),&(p->mark2),&(p->mark3))>0)

InsertOneNode(p);
p=MallocNode();

fclose(fp);

/************************************
函数功能:显示菜单,根据用户的输入
完成相应的功能
************************************/
void DesplayMenu(void)

STUDENT *p;
printf("-------请选择相应功能------------\n\n");
printf("| 1 显示所有学生的信息 |\n");
printf("| 2 按姓名查询 |\n");
printf("| 3 按学号查询 |\n");
printf("| 4 增加学生 |\n");
printf("| 5 删除学生 |\n");
printf("| 6 按姓名修改学生成绩 |\n");
printf("| 7 按学号修改学生成绩 |\n");
printf("| 8 保存所有学生信息 |\n");
printf("| 9 显示优秀和不及格学生成绩 |\n");
printf("| 10 排序结果并输出绩 |\n");
printf("| 11 退出 |\n\n");
scanf("%d",&choose);/*取得用户的选择*/
switch(choose)

case 1:
OutputInformation();/*显示所有学生的信息*/
break;
case 2:
DesplayInfoBystudentName();
break;
case 3:
DesplayInfoBystudentNumber();/*根据用户输入的学号显示该学生的信息*/
break;
case 4:
p=MallocNode();/*先申请一个新结点*/
GetInformation(p);/*要求用户输入信息到新结点中*/
InsertOneNode(p);/*将新结点加到链表中*/
break;
case 5:
DeleteNodeBystudentNumber();/*根据用户输入的学号删除该学生*/
break;
case 6:
ChangeMarkByName();/*根据用户输入的姓名修改学生成绩*/
break;
case 7:
ChangeMarkByNumber();/*根据用户输入的学号修改学生成绩*/
break;
case 8:
SaveLinkToFile();/*保存数据*/
break;
case 9:
DesplayMarkSegment();/*显示各分数段的学生成绩*/
break;
case 10:
CompositorByTotalMark();
break;
case 11:
SaveLinkToFile();/*保存数据后再退出*/
free(headLink);
exit(1);
break;
default:
break;

DesplayMenu();/*递归调用*/

/************************************
函数功能:建立链表表头
************************************/
void CreateHeadLink(void)

STUDENT *p;
p=(STUDENT*)malloc(sizeof(STUDENT));
headLink=p;
p->next=NULL;

/************************************
函数功能:申请一个新结点,并将其初始化
************************************/
STUDENT *MallocNode(void)

STUDENT *p;
int i;
p=(STUDENT*)malloc(sizeof(STUDENT));
if(p==NULL)
return NULL;
for(i=0;i<10;i++)
p->studentNumber[i]='\0';
for(i=0;i<20;i++)
p->studentName[i]='\0';
for(i=0;i<20;i++)
p->className[i]='\0';
p->mark1=0.0;
p->mark2=0.0;
p->mark3=0.0;
p->next=NULL;
return p;

/************************************
函数功能:取得用户输入的学生信息
************************************/
void GetInformation(STUDENT *t)

printf("请输入学生学号:\n");
scanf("%s",t->studentNumber);
printf("请输入学生姓名:\n");
scanf("%s",t->studentName);
printf("请输入该生所在班级:\n");
scanf("%s",t->className);
printf("请输入第1门成绩:\n");
scanf("%f",&(t->mark1));
printf("请输入第2门成绩:\n");
scanf("%f",&(t->mark2));
printf("请输入第3门成绩:\n");
scanf("%f",&(t->mark3));

/************************************
函数功能:在链表的结尾处增加一个结点
************************************/
void InsertOneNode(STUDENT *t)

STUDENT *p;
p=headLink;
while(p->next)

p=p->next;

p->next=t;

/************************************
函数功能:根据用户输入的学生姓名显示该学生的信息
************************************/
void DesplayInfoBystudentName(void)

STUDENT *p;
char studentName[20];
char flag=0;
p=headLink->next;
printf("请输入学生姓名:\n");
scanf("%s",studentName);
while(p)

if(strcmp(p->studentName,studentName)==0)

printf("学号\t姓名\t班级\t成绩1\t成绩1\t成绩3\t总成绩\t平均成绩\n\n");
DesplayOneNode(p);
flag=1;
break;

p=p->next;

if(!flag)
printf("对不起,不存在姓名为 %s 的学生\n",studentName);

/************************************
函数功能:根据用户输入的学号显示该学生的信息
************************************/
void DesplayInfoBystudentNumber(void)

STUDENT *p;
char studentNumber[10];
char flag=0;
p=headLink->next;
printf("请输入学生学号:\n");
scanf("%s",studentNumber);
while(p)

if(strcmp(p->studentNumber,studentNumber)==0)

printf("学号\t姓名\t班级\t成绩1\t成绩1\t成绩3\t总成绩\t平均成绩\n\n");
DesplayOneNode(p);
flag=1;
break;

p=p->next;

if(!flag)
printf("对不起,不存在学号为 %s 的学生\n",studentNumber);

/************************************
函数功能:输出一个结点的信息
************************************/
void DesplayOneNode(STUDENT *t)

printf("%s\t",t->studentNumber);
printf("%s\t",t->studentName);
printf("%s\t",t->className);
printf("%.2f\t",t->mark1);
printf("%.2f\t",t->mark2);
printf("%.2f\t",t->mark3);
printf("%.2f\t",t->mark1+t->mark2+t->mark3);
printf("%.2f\t\n",(t->mark1+t->mark2+t->mark3)/3);

/************************************
函数功能:根据用户输入的学号删除该学生
************************************/
void DeleteNodeBystudentNumber(void)

char studentNumber[10];
STUDENT *p,*q;
char flag=0;
printf("请输入要删除的学生学号:");
scanf("%s",studentNumber);
p=headLink;
q=headLink->next;
while(q)

if(strcmp(q->studentNumber,studentNumber)==0)

p->next=q->next;
free(q);
flag=1;
break;

p=p->next;
q=q->next;

if(!flag)

printf("不存在该学号的学生\n");
return;

printf("成功删除\n");

/************************************
函数功能:显示所有学生的信息
************************************/
void OutputInformation(void)

STUDENT *p;
p=headLink->next;
if(p==NULL)

printf("现在没有学生信息,请先输入学生信息\n\n");
return;

printf("学号\t姓名\t班级\t成绩1\t成绩1\t成绩3\t总成绩\t平均成绩\n\n");
while(p)

DesplayOneNode(p);
p=p->next;


/************************************
函数功能:根据输入的姓名修改成绩
************************************/
void ChangeMarkByName(void)

STUDENT *p;
char studentName[20];
char flag=0;
float mark1,mark2,mark3;
p=headLink->next;
printf("请输入学生姓名:\n");
scanf("%s",studentName);
while(p)

if(strcmp(p->studentName,studentName)==0)

printf("请输入新的第1门成绩:\n");
scanf("%f",&mark1);
printf("请输入新的第2门成绩:\n");
scanf("%f",&mark2);
printf("请输入新的第3门成绩:\n");
scanf("%f",&mark3);
p->mark1=mark1;
p->mark2=mark2;
p->mark3=mark3;
flag=1;
printf("修改成功\n");
break;

p=p->next;

if(!flag)
printf("对不起,不存在姓名为 %s 的学生\n",studentName);

/************************************
函数功能:根据输入的学号修改成绩
************************************/
void ChangeMarkByNumber(void)

STUDENT *p;
char studentNumber[20];
char flag=0;
float mark1,mark2,mark3;
p=headLink->next;
printf("请输入学生学号:\n");
scanf("%s",studentNumber);
while(p)

if(strcmp(p->studentNumber,studentNumber)==0)

printf("请输入新的第1门成绩:\n");
scanf("%f",&mark1);
printf("请输入新的第2门成绩:\n");
scanf("%f",&mark2);
printf("请输入新的第3门成绩:\n");
scanf("%f",&mark3);
p->mark1=mark1;
p->mark2=mark2;
p->mark3=mark3;
flag=1;
printf("修改成功\n");
break;

p=p->next;

if(!flag)
printf("对不起,不存在学号为 %s 的学生\n",studentNumber);

/************************************
函数功能:保存链表数据到文件中
************************************/
void SaveLinkToFile(void)

STUDENT *p;
FILE *fp;
p=headLink->next;
if(p==NULL)

printf("现在没有学生信息,请先输入学生信息\n\n");
return;

fp=fopen("student.txt","w+");
if(!fp)

printf("文件不存在\n");
return;

while(p)

fprintf(fp,"%s %s %s %f %f %f\n",p->studentNumber,p->studentName,p->className,p->mark1,p->mark2,p->mark3);
p=p->next;

fclose(fp);

/************************************
函数功能:显示优秀和不及格学生成绩
************************************/
void DesplayMarkSegment(void)

STUDENT *p;
int count=0;
p=headLink->next;
printf("60分以下(不及格)的学生成绩如下:\n");
printf("学号\t姓名\t班级\t成绩1\t成绩1\t成绩3\t总成绩\t平均成绩\n\n");
while(p)

if((6>((int)(p->mark1/10)))||(6>((int)(p->mark2/10)))||(6>((int)(p->mark3/10))))/*只要有一科不及格就认为该生不及格*/

count++;
DesplayOneNode(p);

p=p->next;

printf("不及格的学生一共有%d人\n",count);
p=headLink->next;
printf("成绩优秀的学生成绩如下:\n");
printf("学号\t姓名\t班级\t成绩1\t成绩1\t成绩3\t总成绩\t平均成绩\n\n");
count=0;
while(p)

if((8<=((int)(p->mark1/10)))&&(8<=((int)(p->mark2/10)))&&(8<=((int)(p->mark3/10))))

count++;
DesplayOneNode(p);

p=p->next;

printf("成绩优秀的学生一共有%d人\n",count);

/************************************
函数功能:按总成绩排序
************************************/
void CompositorByTotalMark(void)

STUDENT exchange,*r,*p,*q;
r=headLink->next;
if(r==NULL)

printf("现在还没学生信息,请先输入学生信息\n");
return;

while(r)/*两层while循环实现排序*/

p=r;
q=r->next;
while(q)

if((q->mark1+q->mark2+q->mark3)>(p->mark1+p->mark2+p->mark3))

strcpy(exchange.studentNumber,q->studentNumber);/*先复制q结点信息到exchange*/
strcpy(exchange.studentName,q->studentName);
strcpy(exchange.className,q->className);
exchange.mark1=q->mark1;
exchange.mark2=q->mark2;
exchange.mark3=q->mark3;

strcpy(q->studentNumber,p->studentNumber);/*再复制p结点信息到q*/
strcpy(q->studentName,p->studentName);
strcpy(q->className,p->className);
q->mark1=p->mark1;
q->mark2=p->mark3;
q->mark3=p->mark3;
strcpy(p->studentNumber,exchange.studentNumber);/*最后复制exchange结点信息到p*/
strcpy(p->studentName,exchange.studentName);
strcpy(p->className,exchange.className);
p->mark1=exchange.mark1;
p->mark2=exchange.mark2;
p->mark3=exchange.mark3;

q=q->next;

r=r->next;

OutputInformation();


祝你学好c语言。我不是冲着分来的,看看悬赏0我也这么详细,就是想让你能好好认识到什么是大学的真谛,这样的实践菜能让你逐渐成熟!
参考技术A 是在应付课程设计吧!!!
别混了,还是自己好好的做吧,这样对自己有好处
参考技术B 想要它变成什么样,自己做一下修改就是了:
#include<iostream>
#include<fstream>
#include <windows.h>
#include<string>
#include <time.h>
#include<cstdlib>
#include<iomanip>
using namespace std;
int n=0;
#define M cout<<
#define N ;Sleep(80);
#define Y N M
#define NN cout<<"╭—————————————————————————————————————————————╮"<<endl;cout<<"∣ num ∣ name∣ age ∣ hig ∣ 语文 ∣ 数学 ∣ 英语 ∣ 平均 ∣ 总分 ∣ 评语 ∣ "<<endl;cout<<"├———-┼———-┼———┼———┼———-┼———-┼———-┼—————┼————┼———-┤"<<endl;cout<<"∣"<<setw(6)<<p1->num<<setw(3)<<"∣"<<setw(7)<<p1->name<<setw(2)<<"∣"<<setw(4)<<p1->age<<setw(4)<<"∣"<<setw(4)<<p1->hig<<setw(4)<<"∣"<<setw(5)<<p1->score[0]<<setw(4)<<"∣"<<setw(5)<<p1->score[1]<<setw(4)<<"∣"<<setw(5)<<p1->score[2]<<setw(4)<<"∣"<<setw(8)<<setprecision(3)<<p1->ave<<setw(4)<<"∣"<<setw(6)<<p1->sum<<setw(4)<<"∣"<<setw(7)<<p1->p_y<<setw(2)<<"∣"<<endl;cout<<"  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ "<<endl;
////////////////////////////////////////////////////////////////////////////////////////////
////
////
////
////////////////////////////////////////////////////////////////////////////////////////////
class ji_ke_1_class

int num;
char name[20];
int age;
float hig;
int score[3];
float ave;
float sum;
char p_y[10];
public:
void set_date();
void display();
void creat();
void print();
void insert();
void exchange(ji_ke_1_class *p1,ji_ke_1_class *p2);
void sort(int j);
void index(int q,char aa[20]);
void del(int num);
void save();
void tongji();
void load();
class ji_ke_1_class *next;
;
ji_ke_1_class *head,*p1,*p2,*p;

void ji_ke_1_class::set_date ()

cout<<"学号_姓名_年龄_身高_"<<endl;
cin>>num>>name>>age>>hig;
cout<<"-----分数::语文_数学_英语_"<<endl<<" ";
for(int i=0;i<3;i++)
cin>>score[i] ;

void ji_ke_1_class::display()

ji_ke_1_class *p;
int i;
for( p=head , i=0 ; i<n ; i++ , p=p->next )
cout<<"∣"
<<setw(6)<<p->num
<<setw(3)<<"∣"
<<setw(7)<<p->name
<<setw(2)<<"∣"
<<setw(4)<<p->age
<<setw(4)<<"∣"
<<setw(4)<<p->hig
<<setw(4)<<"∣"
<<setw(5)<<p->score[0]
<<setw(4)<<"∣"
<<setw(5)<<p->score[1]
<<setw(4)<<"∣"
<<setw(5)<<p->score[2]
<<setw(4)<<"∣"
<<setw(8)<<setprecision(3)<<p->ave
<<setw(4)<<"∣"
<<setw(6)<<p->sum
<<setw(4)<<"∣"
<<setw(7)<<p->p_y
<<setw(2)<<"∣"
<<endl;

void ji_ke_1_class::print()

ji_ke_1_class *p0=head;
cout<<"╭—————————————————————————————————————————————╮"<<endl;
cout<<"∣ num ∣ name∣ age ∣ hig ∣ 语文 ∣ 数学 ∣ 英语 ∣ 平均 ∣ 总分 ∣ 评语 ∣ "<<endl;
cout<<"├———-┼———-┼———┼———┼———-┼———-┼———-┼—————┼————┼———-┤"<<endl;
p0->display();
cout<<"  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ "<<endl;

void ji_ke_1_class::creat()

int m=0;
float total=0;
head=p2=p1=new ji_ke_1_class;
p1->set_date();
while(p1->num!=0)

n=n+1;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=new ji_ke_1_class;
p1->set_date ();

p2->next=0;
ji_ke_1_class *p=new ji_ke_1_class;
for(p=head ; m<n ; p=p->next )


total=total+p->score[0]+p->score[1]+p->score[2];
p->sum=total;
p->ave=total/3;
cout<<p->sum<<"--------__"<<p->ave<<endl;
if(p->ave>85) strcpy( p->p_y , "优秀" );
else if(p->ave>75) strcpy( p->p_y , "中等" );
else if(p->ave>60) strcpy( p->p_y , "及格" );
else strcpy( p->p_y , "不及格" );
total=0;
m+=1;


template<typename T1>
void exchang1(T1 &a,T1 &b)

int t;
t=a;
a=b;
b=t;

template<typename T2>
void exchang2(T2 &a,T2 &b)

float t;
t=a;
a=b;
b=t;

void ji_ke_1_class::exchange(ji_ke_1_class *p1,ji_ke_1_class *p2)

char t2[30],t1[10];
exchang1(p1->num,p2->num);
exchang1(p1->score[1],p2->score[1]);
exchang1(p1->score[0],p2->score[0]);
exchang1(p1->score[2],p2->score[2]);
exchang2(p1->hig,p2->hig);
exchang2(p1->ave,p2->ave);
exchang2(p1->sum,p2->sum);
strcpy(t2,p1->name);
strcpy(p1->name,p2->name);
strcpy(p2->name,t2);
strcpy(t1,p1->p_y );
strcpy(p1->p_y ,p2->p_y );
strcpy(p2->p_y ,t1);

void ji_ke_1_class::sort(int j)

ji_ke_1_class *p1,*p2;
int m,t;
cout<<endl;
for(p1=head , m=0 ; m<n-1 ; m++ , p1=p1->next)
for(p2=p1->next,t=m+1 ; t<n ; t++ , p2=p2->next)

if( (p1->num) > (p2->num) && j==1 ) exchange(p1,p2);
if( (p1->sum) < (p2->sum) && j==2 ) exchange(p1,p2);

print();
cout<<endl;

void ji_ke_1_class::del(int num)

ji_ke_1_class *p1,*p2;
if(head==0)

cout<<"\nlist null!\n";
goto end1;

p1=head;
while(num!=p1->num && p1->next!=0)

p2=p1;
p1=p1->next;

if(num==p1->num)

if(p1==head) head=p1->next;
else p2->next=p1->next;
cout<<"\n"<<"恭喜你--deleted the:"<<num<<endl<<endl;
n=n-1;

else cout<<num<<"抱歉--好像没有这个数吧!!\n"<<"\n\n";
end1: ;

void ji_ke_1_class::insert()

float total;
ji_ke_1_class *pt=new ji_ke_1_class;
ji_ke_1_class *p0,*p1,*p2;
pt=new ji_ke_1_class;
pt->set_date();
total=0;
int i;
for(i=0;i<3;i++)
total+=pt->score[i];
pt->sum=total;
pt->ave=total/3;
if(pt->ave>85) strcpy( pt->p_y , "优秀" );
else if(pt->ave>75) strcpy( pt->p_y , "中等" );
else if(pt->ave>60) strcpy( pt->p_y , "及格" );
else strcpy( pt->p_y , "不及格" );
p1=head;
p0=pt;
if(head==0)

head=p0;
p0->next=0;

else

while( (p0->num>p1->num)&&(p1->next!=0))


p2=p1;
p1=p1->next;


if(p0->num<=p1->num)

if(head==p1) head=p0;
else p2->next=p0;
p0->next=p1;


else

p1->next=p0;
p0->next=0;


n=n+1;

void ji_ke_1_class::index(int q,char aa[20])

ji_ke_1_class *p1=head;
int m=0,j=0;
int len,flag=1;
int a[4];
for( m=0 ; m<n ; p1=p1->next , m++ )

a[0]=0;a[1]=0;a[2]=0;a[3]=0;
flag=1;
a[0]=(int)( (p1->num)/1000 ); a[1]=(int)( (p1->num-a[0]*1000 )/100 );
a[2]=(int)( (p1->num-a[1]*100-a[0]*1000 )/10 ); a[3]=(int)( p1->num-a[1]*100-a[0]*1000-a[2]*10 );
for(int i=19 ; i>=0 ; i--)

if(aa[i]!=0)
len=i+1;

int m[4],k=0,y=0,x=0,d=0;
for(k=0;k<4;k++)

d=0;
y=(int)aa[k];
for(x=48;x<=57;x++)

d++;
if(x==y) m[k]=(d-1);


for(j=0 ; j<4 ; j++ )

if( a[j]!=m[j] )
flag=0;

if( flag==1 && q==1 )

NN
break;

if( p1->name[0]==aa[0] && p1->name[1]==aa[1] && p1->name[2]==aa[2] && q==2 )

NN
break;


if( m==n ) cout<<"no the student"<<endl;

int x[20];
string filename;
void ji_ke_1_class::save()

int d,d1=0;
int ii;
cout<<endl<<"请输入存储路径(建议存入当前文件中的data_save中)(例 ---绝对路径:C:\\\\文件名\\\\文件名\\\\数据名.dat \n "
<<" ---相对路径:save\\\\数据名.dat; )"
<<endl
<<"路径为:";
string cc;
cin>>cc;
cout<<" ╭——————————————╮"<<endl<<"正在保存 ";
for(ii=0;ii<15;ii++)

cout<<'\20';
Sleep(15);

ifstream file1("程序必用1.dat",ios::binary);
file1.read( (char *)&d , sizeof(d) );
d1=(int)d+1;
file1.close();
string filename0,name_file;
filename0=cc;
name_file=filename0.c_str();
ofstream file2("程序必用1.dat",ios::binary);
file2.write( (char *)&d1 , sizeof(d1) );
file2.close();
ofstream file3("程序必用2.dat", ios::app|ios::out );
file3<<name_file.c_str ()<<" ";
file3.close();
ofstream outfile(cc.c_str(),ios::binary);
if(!outfile)

cerr<<"!!!!!"<<endl;
abort();

outfile.write( (char *)&n , sizeof(n) );
ji_ke_1_class *p=head;
for(int i=0;i<n;i++,p=p->next)
outfile.write( (char *)p,sizeof(ji_ke_1_class));
outfile.close();
for(ii=0;ii<15;ii++)

cout<<'\20';
Sleep(15);

cout<<endl<<endl;
cout<<"-----已成功保存!!!!!!"<<endl<<endl;

void ji_ke_1_class::load()

int h1,h2;
string qq,name[20],name0[20];
ifstream file("程序必用1.dat",ios::binary);
if(!file)

cerr<<"open error!!"<<endl;
abort();

file.read( (char *)&h1, sizeof(h1) );
h2=int(h1);
cout<<"共有以下 "<<h2<<" 个文件"<<endl;

ifstream file0("程序必用2.dat",ios::in);
if(!file0)

cerr<<"open error!!"<<endl;
abort();

for(int e=0;e<h2;e++)

if(e%2==0) cout<<endl;
file0>>name[e];
name0[e]=name[e];
cout<<"第"<<e+1<<"个文件:"<<setw(16)<<(string)name0[e]<<" ; ";

file0.close();
cout<<endl;
loop3:
cout<<endl<<"请输入路径(例 ---绝对路径:C:\\\\文件名\\\\文件名\\\\数据名.dat ---相对路径:save\\\\数据名.dat;)"<<endl ;
cout<<"路径为:";
string ccc;
cin>>ccc;
cout<<" ╭——————————————╮"<<endl<<"正在读取 ";
int ii;
for(ii=0;ii<15;ii++)

cout<<'\20';
Sleep(15);

ifstream infile(ccc.c_str(),ios::binary);
int c;
ji_ke_1_class t[60],*pp[60];
if(!infile)

cout<<endl<<"无此文件; 1---重输 ; other---放弃";
cin>>c;
if(c==1) goto loop3;
else goto loop4;

int nn,nnn;

int i;
infile.read( (char *)&nn , sizeof(nn) );
nnn=(int)nn;
n=nnn;
infile.read( (char *)&t[0] , sizeof(ji_ke_1_class) );
head=(ji_ke_1_class *)&t[0];
for(i=1; i<nnn; i++)

infile.read( (char *)&t[i] , sizeof(ji_ke_1_class) );
pp[i]=(ji_ke_1_class *)&t[i];
if(i==1)

head->next=pp[1];

if(i!=1)

pp[i-1]->next=pp[i];


infile.close();
for(ii=0;ii<15;ii++)

cout<<'\20';
Sleep(15);

cout<<endl;
cout<<endl<<"————————恭喜!!!成功装载,数据文件以可以使用"<<endl<<endl;
loop4:;

void ji_ke_1_class::tongji()

ji_ke_1_class *pm=head;
int m,by=0,bz=0,bc=0,bj=0;
for(pm=head , m=0 ; m<n ; m++ , pm=pm->next)

if( pm->ave >= 85 ) by++;
if( pm->ave < 85 && pm->ave >=75 ) bz++;
if( pm->ave >=60 && pm->ave < 75 ) bj++;
if( pm->ave < 60 ) bc++;

cout<<endl
<<"总计 "<<n<<" 人:"<<endl
<<" 优秀生人数:"<<setw(5)<<by<<setw(12)<<"优秀率为:"<<setw(6)<<setprecision(5)<<(double)by/n<<endl
<<" 中等生人数:"<<setw(5)<<bz<<setw(12)<<"中等率为:"<<setw(6)<<setprecision(5)<<(double)bz/n<<endl
<<" 及格生(60-75)人数:"<<setw(5)<<bj<<setw(12)<<"及格率为:"<<setw(6)<<setprecision(5)<<(double)bj/n<<endl
<<" 不及格人数为:"<<setw(5)<<bc<<setw(12)<<"不及格率为:"<<setw(6)<<setprecision(5)<<(double)bc/n<<endl<<endl;

void bz()

system("cls");
M"欢"Y"迎"Y"使"Y"用"Y"本"Y"程"Y"序"Y"-"Y"-"Y"-"Y"-"Y"-"Y" 使"Y"用"Y"说"Y"明"Y":"N;cout<<endl<<endl;
M"一"Y""Y"、"Y"建"Y"立"Y"自"Y"己"Y"的"Y"数"Y"据"Y"("Y"建"Y"议"Y"马"Y"上"Y"存"Y"储"Y"!"Y"!"Y")"Y"按"Y"提"Y"示"Y"操"Y"作"Y"即"Y"可"Y";"Y"呵"Y"呵"N;cout<<endl<<endl;
M"二"Y""Y"、"Y"注"Y"意"Y"事"Y"项"Y":"Y" 对"Y"链"Y"表"Y"("Y"数"Y"据"Y")"Y"若"Y"超"Y"过"Y"6"Y"0"Y"个"Y","Y"则"Y"请"Y"联"Y"系"Y""Y""Y"吕"Y""Y""Y"威"Y""Y""Y"___"Y"qq"Y":"Y"921963406"Y","Y"可"Y"免"Y"费"Y"赠"Y"送"Y"所"Y"需"Y"程"Y"序"N;cout<<endl<<endl;
M"三"Y""Y"、"Y"建"Y"链"Y"表"Y"的"Y"最"Y"后"Y"使"Y"全"Y"为"Y"0"Y","Y"建"Y"表"Y"结"Y"束"N;cout<<endl<<endl;
M"四"Y""Y"、"Y"因"Y"技"Y"术"Y"有"Y"限"Y","Y"清"Y"屏"Y"函"Y"数"Y"造"Y"成"Y"head"Y"丢"Y"失"Y";"Y"慎"Y"用"Y"!"Y"!"N;cout<<endl<<endl<<" ";
M"制"Y"作"Y"人"Y":"Y""Y""Y""Y""Y"吕"Y""Y""Y""Y""Y"威"Y""Y""Y""Y""N;cout<<endl<<endl;



////////////////////////////////////////////////////////////////////////////////////////////
////
////
////////////////////////////////////////////////////////////////////////////////////////////
void mult()
tm * tp;
time_t t;
cout<<"____________________________________________________________________________________________________\n";
cout<<" ╭——————————————╮\n"
<<" ";
t=time(NULL);
tp=localtime(&t);
cout<<tp->tm_mon+1<<"-"<<tp->tm_mday<<"-"<<tp->tm_year+1900<<" ";
cout<<tp->tm_hour<<":"<<tp->tm_min<<":"<<tp->tm_sec;
cout<<" ∣ 菜单 ∣ \n"
<<" ∣____________________________∣\n"
<<" ∣ 0---创建数据 ∣\n"
<<" ∣ ∣\n"
<<" ∣ 1---按学号排序 ∣\n"
<<" ∣ ∣\n"
<<" ∣ 2---按分数排序 ∣\n"
<<" ∣ ∣\n"
<<" ∣ 3---删除一学生信息 ∣\n"
<<" ∣ ∣\n"
<<" ∣ 4---插入一学生信息 ∣\n"
<<" ∣ ∣\n"
<<" ∣ 5---检索一学生 ∣\n"
<<" ∣ ∣\n"
<<" ∣ 6---统计数据 ∣\n"
<<" ∣ ∣\n"
<<" ∣ 7---保存 ∣\n"
<<" ∣ ∣\n"
<<" ∣ 8---打开 ∣\n"
<<" ∣ ∣\n"
<<" ∣ 9---清屏 ∣\n"
<<" ∣ ∣\n"
<<" ∣ 10--帮助(建议先看) ∣\n"
<<" ∣ other---quit ∣\n"
<<" ∣ ∣\n"
<<"  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\n";

void select()

int fl=0,a,num2;
ji_ke_1_class aa;
loop:
cout<<"What can I do for you ? ? ?(输入命令---数字) :";
cin>>a;
switch(a)

case 0 :

cout<<"输入数据\n";
aa.creat();
aa.print();
goto loop;

case 1 :

aa.sort(1);
goto loop;

case 2 :

aa.sort(2);
goto loop;

case 3 :

cout<<"num========";
cin>>num2;
aa.del(num2);
goto loop;

case 4 :

aa.insert();
goto loop;

case 5 :

char xx[20]=0;
cout<<"输入要查询的学生的学号 或 姓名:";
cin>>xx;
if( xx[0]>=48 && xx[0]<=57 )
aa.index(1,xx);
else
aa.index(2,xx);
goto loop;

case 6 :

aa.tongji();
goto loop;

case 7 :

aa.save();
fl=1;
goto loop;

case 8 :

aa.load();
goto loop;

case 9 :

ji_ke_1_class *nn=new ji_ke_1_class;
head=nn;
system("cls");//清屏造成head丢失-------------------------------------------------------??????????????????
nn=head;
mult();
goto loop;

case 10 :

bz();
mult();
goto loop;

default :

if(fl=0)

char f;
cout<<"你想要储存吗?y/N";
cin>>f;
if(f=='y'||f=='y')

aa.save();
fl=1;
goto loop;

else goto end;

else goto end;


end:;


void main()

int q2=0;
ifstream file0("程序必用1.dat",ios::binary);
if(!file0)

file0.close();
ofstream file1("程序必用1.dat",ios::binary);
file1.write( (char *)&q2 , sizeof(q2) );
file1.close();
goto loop5;

file0.close();
loop5:
mult();
select();
本回答被提问者采纳

以上是关于用C语言设计一个学生成绩管理系统的主要内容,如果未能解决你的问题,请参考以下文章

C语言学生成绩管理系统 怎么用文件排序

C语言(学生成绩管理系统)

怎样用C语言写学生成绩管理系统?

C语言程序设计学生成绩管理系统

C语言编写一个学生成绩管理系统

C语言程序设计 班级学生成绩管理系统