学生成绩统计c语言课程设计,学生成绩管理系统-C语言课程设计

记一次课程设计作业 Fun3K5cjZ-g3vII6W0gxoHy34h9w学生成绩管理系统#include

#include

#include

#include

/*

学生成绩管理系统介绍

2017C语言课程设计  202160936

1.支持将数据保存到文件并从文件中读取已有数据

2.支持添加、删改数据

3.支持按学号或姓名查询、删除、修改数据

4.支持简单统计,包括 不及格人数、最高分、最低分

5.支持按总分排序整理数据

*/

struct student

{

char num[10];

char name[20];

int cgrade;

int sxgrade;

int yygrade;

int total;

float ave;

};

struct node

{

struct student data;

struct node *next;

}*head,*last;

int Add(int i)//执行增加学生记录操作

{

struct node *tmp;

int loop=1;

while (loop)

{

printf("请按以下格式输入数据:\n");

tmp=(struct node *)malloc(sizeof (struct node));

printf("学号姓名 C语言成绩 数学成绩 英语成绩\n");

scanf("%s %s %d %d %d",tmp->data.num,tmp->data.name,&tmp->data.cgrade,&tmp->data.sxgrade,&tmp->data.yygrade);

tmp->data.total=tmp->data.cgrade+tmp->data.sxgrade+tmp->data.yygrade;

tmp->data.ave=tmp->data.total/3.0;

if (last!=NULL)

{

last->next=tmp;

last=last->next;

}

else

{

head=last=tmp;

}

last->next=NULL;

i++;

printf("添加成功!输入1继续录入,输入0终止录入  ");

int t;

scanf("%d",&t);

if (t==0)

loop=0;

}

return i;

}

int Del(int i)//执行删除学生记录操作

{

char tmpname[20];

char tmpnum[10];

int find=0,way;

struct node *tmp=head,*tmpbak=head;

printf("请选择删除依据:  1.学号  2.姓名 \n ");

scanf("%d",&way);

switch (way)

{

case 1:printf("请输入学号:");

scanf("%s",tmpnum);

while ((tmp!=NULL)&&(!find))

{

if (!strcmp(tmpnum,tmp->data.num))

{

find=1;

break;

}

tmpbak=tmp;

tmp=tmp->next;

}

if (!find)

{

printf("抱歉,学号 %s未查到相关数据!\n",tmpnum);

}

else

{

if (tmpbak==tmp)

{

head=head->next;

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

i--;

return i;

}

else

{

tmpbak->next=tmp->next;

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

i--;

return i;

}

}

case 2:printf("请输入姓名:");

scanf("%s",tmpname);

while ((tmp!=NULL)&&(!find))

{

if (!strcmp(tmpname,tmp->data.num))

{

find=1;

break;

}

tmpbak=tmp;

tmp=tmp->next;

}

if (!find)

{

printf("抱歉,姓名 %s未查到相关数据!\n",tmpname);

}

else

{

if (tmpbak==tmp)

{

head=head->next;

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

i--;

return i;

}

else

{

tmpbak->next=tmp->next;

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

i--;

return i;

}

}

default:printf("选择错误,查询失败!\n");

}

}

void Edit(struct node* tmp)//执行修改学生记录操作

{

printf("请输入修改后的信息:\n");

printf("学号姓名 C语言成绩 数学成绩 英语成绩\n");

scanf("%s %s %d %d %d",tmp->data.num,tmp->data.name,&tmp->data.cgrade,&tmp->data.sxgrade,&tmp->data.yygrade);

tmp->data.total=tmp->data.cgrade+tmp->data.sxgrade+tmp->data.yygrade;

tmp->data.ave=tmp->data.total/3.0;

printf("修改成功! \n");

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

}

void Query()//执行查询学生记录操作

{

char tmpname[20];

char tmpnum[10];

int find=0,way,change=0;

struct node *tmp=head;

printf("请选择查询方式:  1.学号   2.姓名 \n ");

scanf("%d",&way);

switch (way)

{

case 1:printf("请输入学号:");

scanf("%s",tmpnum);

while ((tmp!=NULL)&&(!find))

{

if (!strcmp(tmpnum,tmp->data.num))

{

find=1;

printf("找到以下数据!\n");

printf("学号姓名 C语言成绩 数学成绩 英语成绩 总分 平均分 \n");

printf("%s %s%d%d%d%d%.2f \n",tmp->data.num,tmp->data.name,tmp->data.cgrade,tmp->data.sxgrade,tmp->data.yygrade,tmp->data.total,tmp->data.ave);

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

printf("是否修改数据? 输入1修改,输入0取消 ");

scanf("%d",&change);

if (change)

Edit(tmp);

}

tmp=tmp->next;

}

if (!find)

{

printf("抱歉,学号 %s未查到相关数据!\n",tmpnum);

}

break;

case 2:printf("请输入姓名:");

scanf("%s",tmpname);

while ((tmp!=NULL)&&(!find))

{

if (!strcmp(tmpname,tmp->data.name))

{

find=1;

printf("找到以下数据!\n");

printf("学号姓名 C语言成绩 数学成绩 英语成绩 总分 平均分 \n");

printf("%s %s%d%d%d%d%.2f \n",tmp->data.num,tmp->data.name,tmp->data.cgrade,tmp->data.sxgrade,tmp->data.yygrade,tmp->data.total,tmp->data.ave);

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

printf("是否修改数据? 输入1修改,输入0取消 ");

scanf("%d",&change);

if (change)

Edit(tmp);

}

tmp=tmp->next;

}

if (!find)

{

printf("抱歉,姓名 %s未查到相关数据!\n",tmpname);

}

break;

default:printf("选择错误,查询失败!\n");

}

}

void Tongji()//执行统计学生记录操作

{

struct node *tmp=head;

int cbjg=0,sxbjg=0,yybjg=0,avebjg=0,cmax=0,sxmax=0,yymax=0,avemax=0,cmin=100,sxmin=100,yymin=100,avemin=100;

printf("正在统计数据,请稍候...\n");

while (tmp!=NULL)

{

if (tmp->data.cgrade<60)

cbjg++;

if (tmp->data.cgrade>cmax)

cmax=tmp->data.cgrade;

if (tmp->data.cgrade

cmin=tmp->data.cgrade;

if (tmp->data.sxgrade<60)

sxbjg++;

if (tmp->data.sxgrade>sxmax)

sxmax=tmp->data.sxgrade;

if (tmp->data.sxgrade

sxmin=tmp->data.sxgrade;

if (tmp->data.yygrade<60)

yybjg++;

if (tmp->data.yygrade>yymax)

yymax=tmp->data.yygrade;

if (tmp->data.yygrade

yymin=tmp->data.yygrade;

if (tmp->data.ave<60)

avebjg++;

if (tmp->data.ave>avemax)

avemax=tmp->data.ave;

if (tmp->data.ave

avemin=tmp->data.ave;

tmp=tmp->next;

}

printf("****************************\n统计完成,数据如下:\n");

printf("C语言不及格人数:%d 最高分:%d 最低分:%d \n",cbjg,cmax,cmin);

printf("数学不及格人数:%d 最高分:%d 最低分:%d \n",sxbjg,sxmax,sxmin);

printf("英语不及格人数:%d 最高分:%d 最低分:%d \n",yybjg,yymax,yymin);

printf("平均分不及格人数:%d 最高分:%d最低分:%d \n",avebjg,avemax,avemin);

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

}

void Sort(int n)//执行按降序进行排列学生记录的操作

{

int i,j;

struct node *tmp=head,*tmpbak=head->next,*bak;

bak=(struct node *)malloc(sizeof (struct node));

for(i = 0; i 

{

for(j = 0; i + j 

{

if(tmpbak->data.total> tmp->data.total)

{

bak->data =tmp->data;

tmp->data = tmpbak->data;

tmpbak->data = bak->data;

}

tmp=tmp->next;

tmpbak=tmpbak->next;

}

tmp=head;

tmpbak=head->next;

}

printf("排序完成!\n");

}

int Save()//执行存盘操作stuinfo.dat

{

if(!head) return 0;

FILE *fp=fopen("stuinfo.dat","wb");

int i=0;

while(head)

{

fwrite(&head->data,sizeof(student),1,fp);

i++;

head=head->next;

}

fclose(fp);

return i;

}

int load()    //从文件stuinfo.dat中载入数据

{

FILE *fp=fopen("stuinfo.dat","rb");

if(!fp)

{

printf("Can not open the file!\n");

return 0;

}

struct node *tmp;

fseek(fp,0,SEEK_END);

long end=ftell(fp);

fseek(fp,0,SEEK_SET);

int i=0;

if(ftell(fp)==end)

{

printf("无记录!\n");

return 0;

}

while(ftell(fp)!=end)

{

tmp=(struct node*)malloc(sizeof(struct node));

tmp->next=NULL;

fread(&tmp->data,sizeof(struct student),1,fp);

i++;

if (last!=NULL)

{

last->next=tmp;

last=last->next;

}

else

{

head=last=tmp;

}

last->next=NULL;

}

fclose(fp);

return i;

}

void Display()//执行将学生记录以表格形式打印输出至屏幕的操作

{

struct node *tmp=head;

printf("学号姓名 C语言成绩 数学成绩 英语成绩 总分 平均分 \n");

while (tmp!=NULL)

{

printf("%s %s%d%d%d%d%.2f",tmp->data.num,tmp->data.name,tmp->data.cgrade,tmp->data.sxgrade,tmp->data.yygrade,tmp->data.total,tmp->data.ave);

tmp=tmp->next;

printf("\n");

}

}

void Wrong()//给出按键错误提示

{

printf("输入错误,请重新输入! \n");

}

int Quit()//存盘且退出

{

Save();

return 0;

}

int Menu()//操作选单

{

int i;

printf("========================================================\n");

printf("欢迎使用学生成绩管理系统!\n");

printf(" 0: 存盘并退出\n");

printf(" 1:增加学生记录\n");

printf(" 2:删除学生记录\n");

printf(" 3:查询/修改学生记录\n");

printf(" 4:统计学生记录\n");

printf(" 5:按降序进行排列学生记录\n");

printf(" 6:将学生记录以表格形式打印输出至屏幕\n");

printf("========================================================\n");

printf("请选择你需要的操作:");

scanf("%d",&i);

printf("\n");

return i;

}

void main()

{

int i,choice,loop=1;

i=load();

printf("从stuinfo.dat导入了%d条数据\n\n",i);

while (loop)

{

choice=Menu();

switch (choice)

{

case 0:loop=Quit();break;

case 1:i=Add(i);break;

case 2:i=Del(i);break;

case 3:Query();break;

case 4:Tongji();break;

case 5:Sort(i);break;

case 6:printf("共有%d条数据!\n",i);Display();break;

default:Wrong();

}

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474491.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 439. 三元表达式解析器

文章目录1. 题目2. 解题2.1 递归2.2 循环1. 题目 给定一个以字符串表示的任意嵌套的三元表达式&#xff0c;计算表达式的值。 你可以假定给定的表达式始终都是有效的并且只包含数字 0-9, ?, :, T 和 F (T 和 F 分别表示真和假&#xff09;。 注意&#xff1a; 给定的字符串…

Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?...

《Java中&#xff0c;String类型和包装类型作为参数传递时&#xff0c;是属于值传递还是引用传递呢?》 《Java中的值传递和引用传递》 原理知识: 如果参数类型是原始类型&#xff0c;那么传过来的就是这个参数的一个副本&#xff0c;也就是这个原始参数的值&#xff0c;这个跟…

c语言结构内部定义指针,C语言知识补漏(一)结构体指针以及位域定义

一、结构体指针typedef struct{unsignedlong int DATA;unsignedlong int DIRECTION;unsignedlong int INTERRUPT_MASK;unsignedlong int EDGE_CAPTURE;}PIO_STR;//define LED Register#ifdef _LED#define LED ((PIO_STR *)LED_BASE) //表示定义了一个PIO_STR的指针&#xff0c;…

LeetCode 1216. 验证回文字符串 III(DP)

文章目录1. 题目2. 解题1. 题目 给出一个字符串 s 和一个整数 k&#xff0c;请你帮忙判断这个字符串是不是一个「K 回文」。 所谓「K 回文」&#xff1a;如果可以通过从字符串中删去最多 k 个字符将其转换为回文&#xff0c;那么这个字符串就是一个「K 回文」。 示例&#x…

武松打虎进化版

[代码] [Java]代码 import java.util.*; class Q {boolean b false;Random r null;//武松的血条int wusongblood 10;//老虎的血条int tiggerblood 10;public Q(){r new Random();}// http://www.haokk123.info/linked/20130424.do 武松侵犯public synchronized void wugon…

c语言表达式10 amp 6等于多少,C语言基础——表达式

目录回顾&#xff1a;一、定义概念&#xff1a;二、表达式的分类举例说明&#xff1a;(一)首先是加、减、乘、除、取余四种表达式&#xff1a;(二)一元表达式(三)强制转换表达式(四)判断表达式(五)逻辑表达式(六)移位表达式小结写在最后&#xff1a;回顾&#xff1a;在上一篇博…

python中break与continue使用

1.break的作用&#xff1a;用来结束整个循环&#xff0c;continue的作用&#xff1a;用来结束本次循环&#xff0c;紧接着执行下一次的循环。 2.break/continue只能用在循环中&#xff0c;除此以外不能单独使用。 3.break/continue在嵌套循环中&#xff0c;只对最近的一层循环…

LeetCode 1274. 矩形内船只的数目(分治)

文章目录1. 题目2. 解题1. 题目 (此题是 交互式问题 ) 在用笛卡尔坐标系表示的二维海平面上&#xff0c;有一些船。 每一艘船都在一个整数点上&#xff0c;且每一个整数点最多只有 1 艘船。 有一个函数 Sea.hasShips(topRight, bottomLeft) &#xff0c;输入参数为右上角和…

C语言数组相似度比对,某课程设计---文件相似度判断

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼//返回两个文件操作是否都成功return ( result1 && result2 );}//功能:将数据存储到文件内//输入:const char * FileName----想写入数据的文件名// :const char * Data----想写入的数据//输出:无//返回值:布尔型---真表…

图的定义与术语 - 数据结构和算法54

图的定义与术语 让编程改变世界 Change the world by program 在前边讲解的线性表中&#xff0c;每个元素之间只有一个直接前驱和一个直接后继&#xff0c;在树形结构中&#xff0c;数据元素之间是层次关系&#xff0c;并且每一层上的数据元素可能和下一层中多个元素相关&…

c 语言银行排队系统,C++实现银行排队系统

#include #include #include int cnt0; //当日客流量int sum0; //当日客户排队总时间typedef struct pnode{int number;int cometime;int leavetime;struct pnode *next;}*person;typedef struct node{person front;person rear;int length;}linkqueue;linkqueue q[5];int numb…

LeetCode 1152. 用户网站访问行为分析

文章目录1. 题目2. 解题1. 题目 为了评估某网站的用户转化率&#xff0c;我们需要对用户的访问行为进行分析&#xff0c;并建立用户行为模型。 日志文件中已经记录了用户名、访问时间 以及 页面路径。 为了方便分析&#xff0c;日志文件中的 N 条记录已经被解析成三个长度相…

python缺省参数与多个函数返回值

缺省参数 调用函数时&#xff0c;缺省参数的值如果没有传入&#xff0c;则被认为是默认值。 下例会打印默认的age&#xff0c;如果age没有被传入. def printinfo( name,age 35 ): # 打印任何传入的字符串 print "Name: ", name print "Age ", age #调…

如何用c语言制作飞机订票系统,C语言编程飞机订票系统如何设计?

题目&#xff1a;编制一个航空客运订票系统&#xff0c;实现简单的机票操作班级&#xff1a;计0702 姓名&#xff1a;学号&#xff1a; 完成日期&#xff1a;2008年12月20日一、 实验内容&#xff1a;1、问题描述&#xff1a;航空客运订票的业务包括&#xff1a;查询航班、客票…

挖掘有价值的搜索关键词

挖掘有价值的搜索关键词 在对搜索引擎流量及关键词的标记后&#xff0c;还需要从中挖掘最有价值的那部分关键词。以下是关键词挖掘思路和详细的操作方法。 图1 挖掘有价值的搜索关键词 找到一个有价值的关键词&#xff0c;再加上好的搜索排名&#xff0c;就可以给网站带来大量…

LeetCode 1197. 进击的骑士(BFS)

文章目录1. 题目2. 解题1. 题目 一个坐标可以从 -infinity 延伸到 infinity 的 无限大的 棋盘上&#xff0c;你的 骑士 驻扎在坐标为 [0, 0] 的方格里。 骑士的走法和中国象棋中的马相似&#xff0c;走 “日” 字&#xff1a;即先向左&#xff08;或右&#xff09;走 1 格&am…

android在特定时间,如何在Android Oreo的特定时间在Android上发出通知?

我正在寻找一种在“设置”中创建首选项的方法,以便在Android应用中的特定时间(由用户在设置中设置)发送通知.我看过像this这样的不同线程,但是这在Android Oreo中不起作用.有人可以帮我这个或者指点我一个教程吗&#xff1f;解决方法:在查看了不同的帖子和对AlarmManager实现的…