您的位置:首页 > 其它

学生成绩管理系统完整版

2006-06-16 19:49 399 查看

[b]学生成绩管理系统能够实现基本的录入、查找、插入、删除、修改、计算平均成绩、根据平均成绩排名和输出等功能。

学生成绩管理系统可以在VC++、Dev-c++等可视化环境中编译
录入(选择1):录入也是创建的过程,创建时先输入各科成绩,再调用平均分函数,再以平均分的大小从大到小的顺序创建链表.
删除(选择2):根据学号来删除。
插入(选择3):插入和创建基本相同,也调用插入函数,根据平均分来
查找(选择4):根据学号来查找相应的信息。
修改(选择5):修改的基本思路是先根据学号来查找学号在链表中的位置,然后把它从链表中删除,再根据平均分的大小来调用插入函数重新插入链表中来,让链表始终有顺序。
排名和输出在整个系统中都用到了!!!



1、 学生管理系统代码如下:
//编译环境:VC++
//date:2006.6.16
//作者:刘德范 05软件2班 0513222
#include "stdio.h"
#include "malloc.h"
#include "stdlib.h"
#include "conio.h"
#include"ctype.h"
#define Esc 27 //定义键盘退出键Esc
#define NULL 0
#define LEN sizeof(struct student)
struct student
{
char class_0[20]; //班级
int num; //学号
char name[20]; //姓名
float elec; //电子技术
float c_prog; //C++程序设计
float media; //多媒体技术
float eng; //大学英语
float math; //高等数学
float sport; //大学体育
float polity; //马克思主义政治经济学
float ave; //平均成绩
int order; //名次
struct student *next;
};

int n; //全局变量,统计学生记录的个数

//涵数声明区
struct student *create();
void Output(struct student *head);
struct student *Delete(struct student *head,int num);
struct student *insert(struct student *head, struct student *stud);
struct student *Lookup(struct student *head, int num);
struct student *Modify(struct student *head, int num);
float Statistic(struct student *p);
struct student *order(struct student *head );
void start();

//创建链表,输入学生的信息

struct student *create()
{
struct student *head;
struct student *p1;
n=0;
p1=( struct student*) malloc(LEN);
printf("请输入学生信息,输入格式为:(每输入一项回车)/n");
printf("以学号为0退出!!!/n");
printf("请输入学生学号:");
scanf("%d",&p1->num);
printf("请输入学生姓名:");
scanf("%s",&p1->name);
printf("请输入学生班级:");
scanf("%s",&p1->class_0);
printf("/n");
printf("请输入电子技术成绩:");
scanf("%f",&p1->elec);
printf("请输入程序设计成绩:");
scanf("%f",&p1->c_prog);
printf("请输入多媒体成绩:");
scanf("%f",&p1->media);
printf("请输入大学英语成绩:");
scanf("%f",&p1->eng);
printf("请输入高等数学成绩:");
scanf("%f",&p1->math);
printf("请输入大学体育成绩:");
scanf("%f",&p1->sport);
printf("请输入马克思主义政治经济学成绩:");
scanf("%f",&p1->polity);
printf("/n");
head=NULL;
while(p1->num!=0)
{
p1->ave=Statistic(p1); //求P1的平均值
head=insert(head,p1); //创建链表
p1=(struct student*)malloc(LEN);
printf("如果你想结束输入,请输入0/n");
printf("请输入学生学号:");
scanf("%d",&p1->num);
if(p1->num==NULL) //控制是否退出
continue;
printf("请输入学生姓名:");
scanf("%s",&p1->name);
printf("请输入学生班级:");
scanf("%s",&p1->class_0);
printf("/n");
printf("请输入电子技术成绩:");
scanf("%f",&p1->elec);
printf("请输入程序设计成绩:");
scanf("%f",&p1->c_prog);
printf("请输入多媒体成绩:");
scanf("%f",&p1->media);
printf("请输入大学英语成绩:");
scanf("%f",&p1->eng);
printf("请输入高等数学成绩:");
scanf("%f",&p1->math);
printf("请输入大学体育成绩:");
scanf("%f",&p1->sport);
printf("请输入马克思主义政治经济学成绩:");
scanf("%f",&p1->polity);
printf("/n");
}
//p2->next=NULL;
return(head);
}

//查看链表
void Output(struct student *head)
{
struct student *p;
/*FILE *fp;
if((fp=("answer.txt","wb"))==NULL)
{
printf("不能打开文件!!!/n");
getch();
exit(0);
}*/
printf("/n现在有 %d 个记录是:/n",n);
p=head;
if(head!=NULL)
do
{
printf("学号为:%d/t",p->num);
printf("姓名为:%s/t",p->name);
printf("班级为:%s/t",p->class_0);
printf("/n");
printf("电子技术成绩为:%.2f/t",p->elec);
printf("程序设计成绩为:%.2f/t",p->c_prog);
printf("多媒体成绩为:%.2f/t",p->media);
printf("/n");
printf("英语成绩为:%.2f/t",p->eng);
printf("数学成绩为:%.2f/t",p->math);
printf("体育成绩为:%.2f/t",p->sport);
printf("/n");
printf("马克思主义政治经济学成绩为:%.2f/t",p->polity);
printf("平均成绩为:%.2f/t",p->ave);
printf("学生名次为:%d/t",p->order);

/*if(fwrite(p,LEN,1,fp)!=1)
{
printf("写入错误!!!/n");
exit(0);
} */
printf("/n");
p=p->next;
}
while(p!=NULL);
printf("/n按任意键继续!!!");
printf("/n");
//fclose(fp);
getch();
}

//根据学号来删除学生信息
struct student *Delete(struct student *head,int num)
{
struct student *p1,*p2;
if (head==NULL) //空链表时返回
{
printf("/n链表为空!/n");
return(head);
}
p1=head;
while(num!=p1->num && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num==p1->num) //链表找到相应的学号
{
if(p1==head) //表头删除
head=p1->next;
else //表中和表尾删除
p2->next=p1->next;
printf("你删除的学生信息为:/n");
printf("学号为:%d/t",p1->num);
printf("姓名为:%s/t",p1->name);
printf("班级为:%s/t",p1->class_0);
printf("/n");
printf("电子技术成绩为:%.2f/t",p1->elec);
printf("程序设计成绩为:%.2f/t",p1->c_prog);
printf("多媒体成绩为:%.2f/t",p1->media);
printf("/n");
printf("英语成绩为:%.2f/t",p1->eng);
printf("数学成绩为:%.2f/t",p1->math);
printf("体育成绩为:%.2f/t",p1->sport);
printf("/n");
printf("马克思主义政治经济学成绩为:%.2f/t",p1->polity);
printf("平均成绩为:%.2f/t",p1->ave);
printf("学生名次为:%d/t",p1->order);
printf("/n");
head=order(head);
n=n-1;
free(p1);
}
else //找不到学号
printf("学号 %d 没有找到!/n",num);
return(head);
}

//插入学生信息
struct student *insert(struct student *head, struct student *stud)
{
struct student *p0,*p1,*p2;
p1=head;
p0=stud;
if(head==NULL) //空链表时返回
{
head=p0;
p0->next=NULL;
}
else
{
while((p0->ave<p1->ave) && (p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}

if(p0->ave>=p1->ave)
{
if(p1==head) //链表头插入
{
p0->next=p1;
head=p0;
// head->next=p0;
}
else //链表中插入
{
p2->next=p0;
p0->next=p1;
}

}
else //链表尾部插入
{
p1->next=p0;
p0->next=NULL;
}

}
n=n+1;
p0->order=0; //初始化名次
return(head);
}

//根据学生学号来查找学生信息
struct student *Lookup(struct student *head, int num)
{
struct student *p1,*p2;

p1=head;

if(head==NULL) //空链表时返回
{
printf("/n链表为空!/n");
return(head);
}
else
{
while(num!=p1->num && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num==p1->num) //找到相对应的学号则显示
{
printf("你查找的学生信息为:/n");
printf("学号为:%d/t",p1->num);
printf("姓名为:%s/t",p1->name);
printf("班级为:%s/t",p1->class_0);
printf("/n");
printf("电子技术成绩为:%.2f/t",p1->elec);
printf("程序设计成绩为:%.2f/t",p1->c_prog);
printf("多媒体成绩为:%.2f/t",p1->media);
printf("/n");
printf("英语成绩为:%.2f/t",p1->eng);
printf("数学成绩为:%.2f/t",p1->math);
printf("体育成绩为:%.2f/t",p1->sport);
printf("/n");
printf("马克思主义政治经济学成绩为:%.2f/t",p1->polity);
printf("平均成绩为:%.2f/t",p1->ave);
printf("学生名次为:%d/t",p1->order);
printf("/n");
return(head);
}
else //学号不在链表内
{
printf("你输入的学号不在链表内!/n");
return(head);
}
}
}

//根据学生学号来修改学生的信息
struct student *Modify(struct student *head, int num)
{
struct student *p1,*p2;
struct student *stude;
stude=(struct student*)malloc(LEN);
p1=head;
if(head==NULL) //链表为空时不能改变信息
{
printf("/n链表为空!/n");
return(head);
}
else
{
while(num!=p1->num && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num==p1->num) //找到相应的学号时
{
if(p1==head) //表头删除
head=p1->next;
else //表中和表尾删除
p2->next=p1->next;
printf("你要修改的学号为%d的先前信息为:/n",num);
printf("学号为:%d/t",p1->num);
printf("姓名为:%s/t",p1->name);
printf("班级为:%s/t",p1->class_0);
printf("/n");
printf("电子技术成绩为:%.2f/t",p1->elec);
printf("程序设计成绩为:%.2f/t",p1->c_prog);
printf("多媒体成绩为:%.2f/t",p1->media);
printf("/n");
printf("英语成绩为:%.2f/t",p1->eng);
printf("数学成绩为:%.2f/t",p1->math);
printf("体育成绩为:%.2f/t",p1->sport);
printf("/n");
printf("马克思主义政治经济学成绩为:%.2f/t",p1->polity);
printf("平均成绩为:%.2f/t",p1->ave);
printf("学生名次为:%d/t",p1->order);
printf("/n");
printf("请输入你要改变的成绩:(格式为:每输入一次回车)/n");
printf("请输入电子技术成绩:");
scanf ("%f",&stude->elec);
printf("请输入程序设计成绩:");
scanf ("%f",&stude->c_prog);
printf("请输入多媒体技术成绩:");
scanf ("%f",&stude->media);
printf("请输入大学英语成绩:");
scanf ("%f",&stude->eng);
printf("请输入高等数学成绩:");
scanf ("%f",&stude->math);
printf("请输入体育成绩:");
scanf ("%f",&stude->sport);
printf("请输入马克思主义政治经济学成绩:");
scanf ("%f",&stude->polity);
p1->elec=stude->elec;
p1->c_prog=stude->c_prog;
p1->media=stude->media;
p1->eng=stude->eng;
p1->math=stude->math;
p1->sport=stude->sport;
p1->polity=stude->polity;
p1->ave=Statistic(p1);
head=insert(head,p1);
head=order(head);
n=n-1;
return(head);
}
else //找不到学号时
{
printf("你查找的学号不在链表内!/n");
return(head);
}
}
}

//根据学生平均分来排名
struct student *order(struct student *head )
{
struct student *p;
int i=1;
p=head;
while(p!=NULL)
{
p->order=i;
i++;
p=p->next;
}

return (head);
}

//根据输入的各科成绩来计算平均分
float Statistic(struct student *p)
{
p->ave=(p->elec+p->c_prog+p->media+p->eng+p->math+p->sport+p->polity)/7.0;
return p->ave;
}

//打印星涵数
void start()
{
printf("********************************************************************************/n");
}

//主涵数
int main()
{
struct student *head,*stu;
int Delete_num;
int lookup_num;
int Modify_num;
char ckey='a';
int istate=0;
do
{
system("cls"); //VC++清屏涵数 包含在#include"stdlib.h"
//clrscr(); //C/C++清屏涵数 包含在#include"conio.h"
start();
printf("/t/t/tWelcome to my score program!!!/n");
printf("/t/t/t欢迎你来到我的成绩管理系统 !!!/n");
printf("/t/t/t/t/t作者:刘德范/n/n");
start();
printf("1:输入学生信息/n");
printf("2:删除学生信息/n");
printf("3:插入学生信息/n");
printf("4:查找学生信息/n");
printf("5:修改学生信息/n");
printf("6:平均成绩排序/n");
printf("7:输出学生信息/n");
printf("Esc:退出/n");
printf("请输入你的选择(1-7):/n/n");
ckey=getch();
if(ckey=='1') //创建
{
printf("请输入学生的信息:/n/n");
head=create();
head=order(head);
Output(head);
istate=1; //记录链表是否有数据
}
else if((istate==0)&&(ckey!=Esc))
{
printf("/n错误:你必需先输入学生信息!!!");
printf("/n按任意键继续!!!");
printf("/n");
getch();
}
else if(ckey=='2') //删除
{
printf ("/n请输入你要删除的学生学号:/n/n");
scanf ("%d",&Delete_num);
head=Delete(head,Delete_num);
Output(head);
}
else if(ckey=='3') //插入
{

printf (" /n请输入你要插入的学生信息:/n/n");
stu=(struct student*)malloc(LEN);
printf("请输入学生信息,输入格式为:(每输入一项回车)/n");
printf("请输入学生学号:");
scanf("%d",&stu->num);
printf("请输入学生姓名:");
scanf("%s",&stu->name);
printf("请输入学生班级:");
scanf("%s",&stu->class_0);
printf("/n");
printf("请输入电子技术成绩:");
scanf("%f",&stu->elec);
printf("请输入程序设计成绩:");
scanf("%f",&stu->c_prog);
printf("请输入多媒体成绩:");
scanf("%f",&stu->media);
printf("请输入大学英语成绩:");
scanf("%f",&stu->eng);
printf("请输入高等数学成绩:");
scanf("%f",&stu->math);
printf("请输入大学体育成绩:");
scanf("%f",&stu->sport);
printf("请输入马克思主义政治经济学成绩:");
scanf("%f",&stu->polity);
printf("/n");
stu->ave=Statistic(stu); //求stu的平均值
head=insert(head,stu);
head=order(head);
Output(head);
}

else if(ckey=='4') //查找
{
printf(" /n请输入你要查找的学生学号:/n/n");
scanf ("%d,",&lookup_num) ;
head=Lookup(head,lookup_num);
Output(head);
}
else if(ckey=='5') //修改
{
printf(" /n请输入你要修改学生信息的学号:/n/n");
scanf ("%d,",&Modify_num) ;
head=Modify(head,Modify_num);
Output(head);
}
else if(ckey=='6') //排序
{
order(head);
Output(head);
}
else if(ckey=='7') //查看
{
Output(head);
}
}
while(ckey!=Esc); //按键盘上的Esc键退出!!!
}
流程图:



结果如下:




[/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: