C语言程序设计 学生信息管理系统 求啊 。。。。。

【功能要求】
(1)学生信息包括:
学号,姓名,性别,出生(年,月,日),三门课成绩和总分( 数学, 英语, C语言, 总分)。
(2)数据格式:
测试数据,以文件方式提供,studf.txt,数据文件自己建立。
(3)需要实现的功能
1) 建立学生信息结构数组 从文件中读入数据
2) 按姓名递增冒泡排序
3) 按总分递减选择排序
4) 显示按总分排序后学生信息
5) 按学号查学生信息和平均分数(顺序查找法)
6) 按姓名查学生信息和平均分数(折半查找法)
7) 查各门课平均分数
8) 查男女学生人数和总人数
9) 显示学生信息表
10) 将排序后的内容存为文件,以后显示时直接从文件中调出而不用再执行排序算法。
有答案麻烦发到我的邮箱里。。。。

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

//全局变量
struct student
{
int num;
char name[20];
char kecheng[20];
float score;
struct student *next;
};
struct student *head=NULL;

//界面、调用函数声明
void cover0();//主界面
void cover1();//内部
//各功能函数声明
void add();//添加记录
void display();//显示所有记录
void search();//按姓名查找
void order();//按成绩排序

//主程序
int main()
{
{//欢迎界面
printf(" **************************欢迎使用**************************\n");
printf(" * *\n");
printf(" * 欢迎使用 学生成绩管理系统 *\n");
printf(" * *\n");
printf(" * BY 小蝎子 *\n");
printf(" * 2010-8-29 *\n");
printf(" * *\n");
printf(" ************************************************************\n\n");
}
cover0();//主界面
return 0;
}
//end of main()

//主界面
void cover0()
{
char demand;
//显示界面,读取指令demand
{
printf(" **********************学生成绩管理系统**********************\n");
printf(" * *\n");
printf(" * *\n");
printf(" * 1:添加成绩记录 *\n");
printf(" * 2:帮助和关于 *\n");
printf(" * 0:退出 *\n");
printf(" * *\n");
printf(" * *\n");
}
scanf("%c",&demand);

while ((demand>'2')||(demand<'0'))
{
scanf("%c",&demand);

}
printf(" ************************************************************\n\n");
//执行操作
switch (demand)
{
case '0'://退出
printf(" **************************谢谢使用**************************\n");
printf(" * *\n");
printf(" * 谢谢使用 学生成绩管理系统verion0.0 *\n");
printf(" * *\n");
printf(" * BY 小蝎子, 2010-8-29 *\n");
printf(" * *\n");
printf(" ************************************************************\n\n\n");
break;
case '1'://添加成绩记录
cover1();
break;
case '2'://帮助和关于
printf(" *************************帮助和关于*************************\n");
printf(" * *\n");
printf(" * 学生成绩管理系统verion0.0 *\n");
printf(" * BY 小蝎子, 2010-8-29 *\n");
printf(" * *\n");
printf(" * @依据提示菜单输入相应数字,以回车结束 *\n");
printf(" * !考虑系统本身承受能力,请勿连续输入多个数字 *\n");
printf(" * @添加数据时,以-1的学号结束输入 *\n");
printf(" * *\n");
printf(" * 欢迎提出宝贵意见和建议! *\n");
printf(" * 0:返回 *\n");
printf(" ************************************************************\n\n");
scanf("%c",&demand);
cover0();
break;

}
}
//end of cover0()

//内部
void cover1()
{
char demand='9';
while (demand!='0')
{
//显示界面,读取指令demand
if (head==NULL)
{//链表中无记录时
printf(" ***********************当前无数据***************************\n");
printf(" * *\n");
printf(" * 1:输入记录 0:返回主界面 *\n");
printf(" * *\n");
scanf("%c",&demand);
while ((demand>'1')||(demand<'0'))
{
scanf("%c",&demand);
}
}
else
{//链表中有记录时
printf(" **************************准备就绪**************************\n");
printf(" * *\n");
printf(" * 1:添加记录 2:显示所有记录 *\n");
printf(" * 3:按姓名查找 4:按成绩排序 *\n");
printf(" * 0:返回主界面 *\n");
printf(" * *\n");
scanf("%c",&demand);
while ((demand>'4')||(demand<'0'))
{
scanf("%c",&demand);
}
}
//执行操作
switch (demand)
{
case '0'://返回主界面
printf(" * > > > > > *\n");
break;
case '1'://输入记录
add(); break;
case '2'://显示所有记录
display(); break;
case '3'://按姓名查找
search(); break;
case '4'://按成绩排序
order(); break;
}
}//end of while (demand!='0')

//清空链表
{
struct student *p1;
for (p1=head;p1!=NULL;)
{
head=head->next;
free(p1);
p1=head;
}
printf(" * > > > > > *\n");
printf(" * !未保存数据已清空 *\n");
printf(" * *\n");
printf(" ************************************************************\n\n");
}
cover0();//返回主界面
}
//end of cover1()

void add()
{
struct student *newh,*p1,*tail;
int checkn;
printf(" * > > > > > *\n");
printf(" * 添加记录 *\n");
printf(" * *\n");
printf(" * 请依次学号,姓名,课程,成绩。以空格分开,以回车结束 *\n");
printf(" * 结束添加记录,请输-1 *\n");
printf(" * *\n");
scanf("%d",&checkn);
if (checkn!=-1)//如果直接不退出
{
//新建链表

newh=malloc(sizeof(struct student));
newh->num=checkn;
scanf("%s %s %f",&newh->name,&newh->kecheng,&newh->score);
newh->next=NULL;
tail=newh;
scanf("%d",&checkn);
while (checkn!=-1)//如果不退出
{
p1=malloc(sizeof(struct student));
p1->num=checkn;
scanf("%s %s %f",&p1->name,&p1->kecheng,&p1->score);
p1->next=NULL;
tail->next=p1;
tail=tail->next;
scanf("%d",&checkn);
}
//与老链表连接
if ((head)==NULL)
head=newh;
else
{
p1=head;
while ((p1->next)!=NULL)
p1=p1->next;
p1->next=newh;
}
printf(" * !数据添加成功 *\n");
}
}

//end of add()

void display(void)
{
struct student *p=head;
printf(" * > > > > > *\n");
printf(" * 全部记录 *\n");
printf("%12s%12s%12s%12s\n","学号","姓名","课程","成绩");
while(p!=NULL)
{
printf("%12d%12s%12s%12.0f\n",p->num,p->name,p->kecheng,p->score);
p=p->next;
}
printf(" * *\n");
}

//end of display()

void search(void)
{
char obj[20];
struct student *p=head;
printf(" * > > > > > *\n");
printf(" * 按姓名查找 *\n");
printf(" * 请输入您要查找的同学姓名 *\n");
scanf("%s",obj);

while((strcmp(p->name,obj)!=0)&&((p->next)!=NULL))
{
p=p->next;
};
if(strcmp(p->name,obj)==0)
{
printf(" * 该同学个人信息为: *\n");
printf("%12s%12s%12s%12s\n","学号","姓名","课程","成绩");
printf("%12d%12s%12s%12.0f\n",p->num,p->name,p->kecheng,p->score);
}
else
printf(" * !查无此人 *\n");
}

//end of search()

//按成绩排序:冒泡法
void order()
{
void display();
struct student *p0,*p1,*p2,*p3;
int leng=0,lennow;
for (p1=head;p1!=NULL;p1=p1->next)
leng++;
p0=malloc(sizeof(struct student));
p0->next=head;
head=p0;
for (lennow=leng-1;leng>0;leng--,lennow=leng-1)
for (p1=p0;lennow>0;p1=p1->next,lennow--)
{
p2=p1->next;
p3=p2->next;
if (p2->score<p3->score)
{
p2->next=p3->next;
p3->next=p2;
p1->next=p3;
}
}
head=head->next;
free(p0);
printf(" * !排序成功 *\n");
display();
}

//end of order()
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-10-26
我们今年做课设时使用的是C++,文件保存也是C++格式的,你要不?
或许你可以改一下改成C语言的追问

开发环境就是visual C++ 6.0的啊

追答

恩,我的也是VC6.0,我说我做的学生信息管理系统是用C++,不是C语言,把你邮箱贴上,我给你发过去,你看看,能改就用,不能改就放照那个写,希望对你有用

相似回答