学生成绩管理系统完整版
学生成绩管理系统能够实现基本的录入、查找、插入、删除、修改、计算平均成绩、根据平均成绩排名和输出等功能。
学生成绩管理系统可以在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键退出!!!
}
流程图:
结果如下:
学生成绩管理系统完整版相关推荐
- C# 学生成绩管理系统 完整版
知识点 一种类似指针的数据结构? 文件的读取和写入 避免乱码 ansi 字符串读取后分割的bug 可能是因为编码问题导致的 为了解决这个bug 写入的时候直接用\r\n分割了 但是解决乱码问题之后可能 ...
- c语言学生信息系统 完整版,C语言 学生信息管理系统(完整版).docx
C语言 学生信息管理系统(完整版) 电子科技大学成都学院 程序综合设计论文 论文题目 学生信息管理系统 学生姓名 魏国 学 号 1340840625 专 业 机械设计制造及其自动化 系(分院) 电子工 ...
- C语言学生成绩管理系统文档版,C语言学生信息管理系统(完整版)总结.docx
电子科技大学成都学院 程序综合设计论文 论文题目 学生信息管理系统 学生姓名 魏国 学 号 1340840625 专 业 机械设计制造及其自动化 系(分院) 电子工程系 授课教师 杜娥 2015年12 ...
- 利用Python分析学生成绩(完整版)
注意:本实验是基于Anconda3.X所进行的 一.题目描述 二.题目分析 三.完整代码展示 四.结果展示 一.题目描述 个人构造一个30名学生的班级,每名学生有三门课程,学生的学号和各门成绩形如: ...
- 学生成绩管理系统(完整版)
说明 一.设计报告的基本内容至少包括封面. 正文. 参考文献三部分. 1. 封面 封面按照模版填写,不得随意更改. 2. 正文 正文是设计报告的主体, 具体由以下几部分组成: (1) 问题描述 描述要 ...
- 基于PHP和MySql的学生成绩管理系统(附完整版代码)
系统开发运行环境 操作系统:win10 软件:AppServ(php+apache+mysql),nginx(代理) 2.2 功能要求 2.2.1 教职工 对学生成绩有一个整体的了解,在今后的教学中能 ...
- java计算并显示学生的成绩_Java开学测试-学生成绩管理系统
题目: 1.定义 ScoreInformation 类,其中包括七个私有变量(stunumber, name, mathematicsscore, englishiscore,networkscore ...
- ASP.NetCore+VUE 实现学生成绩管理系统(一)
周三 陪伴是最长情的告白 还有两天情人节:「无论是在家里,还是在工作,或者是在自我防护中,多给家人爱人发句平安,是最有心意.最重要的一件事.」 ♥感谢老李???? 近来一段时间一直没有学习新的东西,闲 ...
- JSP Servlet Mysql学生成绩管理系统
一. 开发背景 软件名称:学生成绩管理系统 使用对象:有Java基础的同学 二. 需求分析 系统分析 该学生信息管理系统涉及到学生.教师.系统管理员.班级.学生成绩.课程.设置一个系统管理员对系统进行 ...
最新文章
- vue --- 使用字符串'api'跨域请求资源
- 小技巧!CSS 整块文本溢出省略特性探究
- 被 C# 的 ThreadStatic 标记的静态变量,都存放在哪里了?
- POJ 2226 二分图最小覆盖
- golang return要返回的参数太多_Golang中的Defer必掌握的7知识点
- RestfulToolKit:根据接口,快速定位代码
- html5 push api,HTML5+ API Reference
- HttpClient连接池的连接保持、超时和失效机制
- try catch对异常进行输出到日志、_spring Boot手把手教学(7): 抛弃try-catch, 如何优雅统一处理异常(含404)...
- mysql 页 存储,MySQL InnoDB Engine--数据页存储和UPDATE操作
- Linux系统编程 -- stdin stdout stderr
- 深圳中电港 招聘FAE(FPGA Lattice)
- 深入浅出的mysql第三版和第二版的区别_深入浅出mysql和高性能mysql哪本好
- 快速阅读之眼球的训练
- Java Web项目开发项目经验总结
- 已知标准差用计算机求标准误,【摘自网络】关于标准差、标准误、相对标准差的计算...
- java 中英文长度_Java--计算中英文长度的若干种方法
- 我win10下载红警-尤里复仇黑屏,能运行,下载这个好了
- Linux账户管理详解
- python docx首行缩进两字符的设定方法
热门文章
- tensorflow打印模型图_tensorflow实现打印pb模型的所有节点
- 烧一根不均匀的绳,从头烧到尾总共需要一个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢?
- 华为影像XMAGE:求尽世间像,终见菩提心
- groovy if 判断字符串_Groovy(二)-字符串
- 大数据就业前景及职能定位解析!
- 重新安装的nvidia显卡驱动
- 是非人生 — 一个菜鸟程序员的5年职场路 第1节
- 区块链技术涉及哪些编程语言?
- SpringBoot 雪花算法生成商品订单号【SpringBoot系列13】
- 阿里巴巴国际站产品标题优化技巧