c语言程序---学生成绩管理系统
更新时间:2023-07-30 01:47:01 阅读量: 实用文档 文档下载
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#include<string.h>
#define N 50
//定义结构类型
struct student
{
int stuNo; //学号
char name[10]; //姓名
float cScore ; //C成绩
float javaScore; //java成绩
float sqlScore; //sql成绩
float sumScore; //总分
float avgScore; //平均分
}stu[N];//定义学生结构数组
/*函数原型说明*/
void add();
void display();
void sort();
void insert();
void del();
void sortByNo(); //px学号
void sortByavg(); //px平均分
void insertById(int);
void writeFile();
void readFile();
struct student input();//录入的函数原型
int count=0; //存储当前已有的学生人数
//登入界面
int login()
{
int i=0;
char uname[20];
char pwd[20];//密码 123\0
system("cls");
printf("\n\t\t +++++ Welcome to you!!! +++\n");
printf("\n\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("\n\t\t用户名:");
gets(uname);
printf("\n\t\t密 码:");
fflush(stdin);
do
{
pwd[i] = getch(); // 123\r
if(pwd[i]!='\r')//如果当前输入不是回车键,则输出*
{
i++;
printf("*");
}
}while(pwd[i]!='\r');
pwd[i]='\0';//将最后的\r替换为\0
//验证
if(strcmp(uname,"hhysz")==0 && strcmp(pwd,"hh200707")==0)
return 1;
else
return 0;
}
void main()
{
int isSuccess;
int c = 0;//记录登入的次数
do
{
isSuccess = login();//调用登入函数
if(!isSuccess)//如果没有成功
{
printf("\n\t\t\t用户名不存在或密码错误,请检查后重新输入!\n");
printf("\n\t\t\t<您还有 %d 次机会!>",2-c);
c++;
if(c==3)
{
printf("\n\t\t您已尝试登入三次且失败,系统将退出!!!\n");
exit(1);
}
fflush(stdin);
getch();
}
else //登入成功
break;
}while(1);
int select; //选择项
do
{
system("cls");//清屏
printf("\n\t\t 欢迎进入学生成绩管理系统\n");
printf("\n\t***********************************************\n");
printf("\n\t\t\t1.添加学生信息\n");
printf("\n\t\t\t2.显示学生信息\n");
printf("\n\t\t\t3.排序学生信息\n");
printf("\n\t\t\t4.插入学生信息\n");
printf("\n\t\t\t5.删除学生信息\n");
printf("\n\t\t\t6.保存文件\n");
printf("\n\t\t\t7.打开文件\n");
printf("\n\t\t\t8.退出系统\n");
printf("\n\t**********************************************\n");
printf("\n\t请选择<1--8>:");
scanf("%d",&select);
if(select == 8)
{
printf("\n\t~~bye!!!\n");
break;
}
switch(select)
{
case 1:
add();//添加学生
break;
case 2:
display();//显示
break;
case 3:
s
ort();//排序
break;
case 4:
insert();//插入学生
break;
case 5:
del();//删除学生
break;
case 6:
writeFile();//写文件
break;
case 7:
readFile();//读
文件
break;
default:
printf("\n\t您输入的选项无效!按任意键重新输入...\n");
getch();
}
}while(1); //死循环
}
/*录入学生*/
struct student input()
{
int i;
struct student st;//定义结构变量
//循环验证添加的学号是否已经存在。
do{
printf("\n输入学号:");
scanf("%d",&st.stuNo);
for(i=0;i<count;i++)
{
if(st.stuNo == stu[i].stuNo)
{
printf("\n\t\t\t您输入的学号已存在,按任意键返回...");
fflush(stdin);
getch();
break;
}
}
if(i==count)
{
break;
}
}while(1);
fflush(stdin); //清空键盘输入的缓存区
printf("请输入姓名:");
gets();
printf("请输入C成绩:");
scanf("%f",&st.cScore);
printf("请输入Java成绩:");
scanf("%f",&st.javaScore);
printf("请输入SQL成绩:");
scanf("%f",&st.sqlScore);
//计算总分与平均分
st.sumScore = st.cScore +st.javaScore +st.sqlScore ;
st.avgScore =st.sumScore /3;
return st;//返回该学生
}
/*添加学生*/
void add()
{
char ans;//用于存放用户的回答
do
{
stu[count] = input();
count++;
printf("\n\t信息录入完成,是否继续(y|n):");
fflush(stdin);
ans = getchar();
}while(ans == 'y'||ans == 'Y');
}
/*显示*/
void display()
{
system("cls");
int i;
//输出表头
printf("\n\t\t*** 显示学生 ***\n");
printf("\n\t学号\t姓名\tC\tJava\tSQL\t总分\t平均分\n");
printf("\t======================================================\n");
for(i=0;i<count;i++)
{
printf("\t%d\t%s\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\n",
stu[i].stuNo,stu[i].name,stu[i].cScore,stu[i].javaScore,stu[i].sqlScore,
stu[i].sumScore,stu[i].avgScore);
}
printf("\t====================================================\n");
printf("\n\t\t\t\t按任意键返回主菜单...");
fflush(stdin);
getch();
}
void sort()
{
int op;
do{
system("cls");//清屏
printf("主界面>>>排序界面");
printf("\n\t\t***********************************************\n");
printf("\n\t\t\t 1.按学号排序<升序> \n");
printf("\n\t\t\t 2.按成绩排序<降序> \n");
printf("\n\t\t\t 0.返回主菜单 \n");
printf("\n\t\t***********************************************\n");
printf("\n\t请选择: ");
scanf("%d",&op);
if(op == 0)
{
break;
}
switch(op)
{
case 1:
sortByNo(); //学号
break;
case 2:
sortByavg(); //平均分
break;
default:
printf("\n\t您输入的选项无效!!!按任意键重新输入...\n");
fflush(stdin);
getch();
}
}while(1); //死循环
}
//按学号排序
void sortByNo()
{
printf("\n\t\t排序进行中,请稍后i...\n");
S
leep(2000);
//冒泡排序
int i,j;
struct student temp; //临时变量
for(i=0;i<count;i++) //控制要冒起的元素的个数
{
for(j=0;j<count-1-i;j++)//控制每冒起一个数,需要经
历的排序次数
{
if(stu[j].stuNo>stu[j+1].stuNo) //">"实现的是升序
{
temp=stu[j+1];
stu[j+1]=stu[j];
stu[j]=temp;
}
}
}
display();
printf("\n\t\t\t排序已完成,按任意键继续...");
fflush(stdin);
getch();
}
//按成绩排序
void sortByavg()
{
int i,j;
struct student temp; //临时变量
for(i=0;i<count;i++)
{
for(j=0;j<count-1-i;j++)
{
if(stu[j].avgScore<stu[j+1].avgScore) //"<"实现的是降序
{
temp=stu[j+1];
stu[j+1]=stu[j];
stu[j]=temp;
}
}
}
display();
printf("\n\t\t\t排序已完成,按任意键继续...");
fflush(stdin);
getch();
}
void insert()
{
int op;
do{
system("cls");//清屏
printf("主界面>>>插入界面");
printf("\n\t\t******************************************************\n");
printf("\n\t\t\t 1.按学号插入<升序>\n");
printf("\n\t\t\t 2.按平均分插入<降序>\n");
printf("\n\t\t\t 0.返回主菜单 \n");
printf("\n\t\t******************************************************\n");
printf("\n\t请选择: ");
scanf("%d",&op);
if(op == 0)
{
break;
}
switch(op)
{
case 1:
insertById(1); //按学号插入
break;
case 2:
insertById(2); //按平均分插入
break;
default:
printf("\n\t您输入的选项无效!!!按任意键重新输入...\n");
fflush(stdin);
getch();
}
}while(1); //死循环
}
//插入学生数据
void insertById(int id)
{
int i;
struct student s = input(); //调用函数,接收要插入的信息
//(1) 查找要插入的数组中的下标位置
for(i=0;i<count;i++)
{
if(id==1) //按学号插入
{
if(s.stuNo<stu[i].stuNo)
break;
}
else if(id==2) //按平均分的降序插入
{
if(s.avgScore > stu[i].avgScore)
break;
}
}
//(2) 循环平移操作---->为要出入的元素预留空间
int j;
for(j=count-1;j>=i;j--)
{
stu[j+1] = stu[j];
}
//(3) 将要插入的元素放入该位置
stu[i] = s;
//(4) 将当前学生人数++
count++;
printf("\n\t学生数据插入完成,按任意键继续...\n");
fflush(stdin);
getch();
}
//删除功能
void del()
{
char ans;
int i;
int sno;//学号
do
{
system("cls");//清屏
printf("主界面>>>删除界面\n");
printf("\n\t*******************************************\n");
printf("\n\t\t请输入需要删除的学号: ");
scanf("%d",&sno);
//1) 查找被删除的学生的学号是否已存在,如果不存在,i即其下标
for(i=0;i<count;i++)
{
if(stu[i].stuNo == sno)
break;
}
//2) 判断是否找到
if(i<count) //找到了
{
//显示需要删除的学生的信息
printf("\n\t需要删除的学生信息如下:\n");
printf("\n\t\t学号\t姓名\tC
\tJava\tSQL\t总分\t平均分\n");
printf("\n\t------------------------------------------------\n");
printf("\n\t\t%d\t%s\t%5.2f\t%
5.2f\t%5.2f\t%5.2f\t%5.2f\n",
stu[i].stuNo,stu[i].name,stu[i].cScore,stu[i].javaScore,
stu[i].sqlScore,stu[i].sumScore,stu[i].avgScore);
//提示是否正确删除
printf("\n\t确认删除该学生信息吗?<y|n>:");
fflush(stdin);
ans = getchar();
if(ans == 'y' || ans =='Y')
{
//如果确认删除,则执行相应的删除操作
int j;
for(j = i;j>count-1 ; j++)
{stu[j] = stu[j+1];}
//将当前学生人数 --
count--;
printf("\n\t\t\t删除操作完成,按任意键继续...");
fflush(stdin);
getch();
}
}
else //没有找到
{
printf("\n\t\tSorry,没有找到对应的学号,无法删除...\n");
fflush(stdin);
getch();
}
//是否继续删除
printf("\n\n\t\t\t是否继续执行删除操作?<y|n>:");
fflush(stdin);
ans = getchar();
if(ans == 'y'||ans == 'Y')
continue; //继续提示删除的学号
else
break; //跳出循环,回到主界面
}while(1);
}
//保存文件
void writeFile()
{
FILE *fp; //定义文件指针变量
fp = fopen("stu.dat","wb"); //以创建文件形式关联
int i;
for(i=0;i<count;i++)
{
//循环将结构数组stu中的记录写入到fp所指向的文件中去
fwrite(&stu[i],sizeof(struct student),1,fp);
}
fclose(fp);//关闭文件
printf("\n\t\t\t文件保存完毕,按任意键继续...\n");
printf("\n");
fflush(stdin);
getch();
}
//读取文件
void readFile()
{
FILE *fp; //定义文件指针
fp = fopen("stu.dat","rb"); //以读取文件形式关联
if(fp==NULL)
{
printf("\n\t\t\tSorry,您要打开的文件不存在。按任意键继续\n");
fflush(stdin);
getch();
}
else //文件存在时
{
//将文件指针移到文件末尾
fseek(fp,0,2);
//计算文件中的记录数
count= ftell(fp)/sizeof (struct student);
//将文件指针移到文件开始,便于读取文件
rewind(fp);
int i;
for(i=0;i<count;i++)
{
fread(&stu[i],sizeof(struct student),1,fp);
}
fclose(fp); //关闭文件
printf("\n\t\t\t文件打开完成,按任意键返回...\n");
printf("\n");
fflush(stdin);
getch();
}
}
//分页显示
void dispByPage()
{
char op;
int i;
int size = 5; //每页显示的记录数 size--->5
int sumPages; //总页数 sumPage
// sumPage = count%size==0 ? count/size : count/size+1;
int p=1; //当前的页码 ---> p--> 1
sumPages = count/size;
if(count%size!=0)
{
sumPages++;
}
do
{
system("cls");//清屏
printf("\n\t\t ===分页显示===\n");
printf("\n\t***************************************************\n");
printf("\n\t学号\t姓名\tC\tJava\tSQL\t总分\t平均分\n");
printf("\t-----------------------------------------------------\n");
for(i=5*(p-1);i<5*p && i<
;count ;i++)
{
printf("\t%d\t%s\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\n",
stu[i].stuNo,stu[i].name,stu[i].cScore,stu[i].javaScore,stu[
i].sqlScore,
stu[i].sumScore,stu[i].avgScore);
}
printf("\t====================================================\n");
printf("\t\t\t 第【 %d 】页\n",p);
printf("\n 1.首页 2.上一页 3.下一页 4.末页 0.退出");
fflush(stdin);
op = getch();
if(op=='0')
break;
switch(op)
{
case '1':
p=1;
break;
case 2:
p--;
if(p<1)
{
printf("\n\n\t\t\t当前已经是第一页了...");
p++;
fflush(stdin);
getch();
}
break;
case 3:
p++;
if(p>sumPage
s)
{
printf("\n\n\t\t当前已经是最后一页了...");
p--;
fflush(stdin);
getch();
}
break;
case 4:
p = sumPages;
break;
}
}while(1);
}
正在阅读:
c语言程序---学生成绩管理系统07-30
中国教师报·教育新闻电子报2011年第22期 - 图文10-28
损益预算检核表12-30
哈佛大学要求学生必看的二十部电影08-09
扶贫移民典型经验材料02-22
11.28 氨基酸代谢205-15
激光打标机毕业论文07-24
美就在我们身边作文350字06-16
现代诗歌:流逝03-21
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 语言程序
- 管理系统
- 成绩
- 学生
- 书写能力的提高 贵在良好习惯的培养
- 钢架结构厂房案例
- 2021年语文版一年级语文下学期期中知识点整理复习练习
- 基于摄影测量的高精度三维城市建筑物建模技术
- 定子永磁型混合励磁双凸极电机设计、分析与控制
- 政府与非盈利组织会计 期末复习题
- 初中语文九年级下册《曹刿论战》4
- 冬季三防安全技术措施
- 高中班级管理制度
- 溃疡性结肠炎诊疗指南
- 淄博市七年级下学期期中数学试卷
- 三年级少先队活动计划通用范本
- 口袋妖怪(黑白)1-649全PM资料
- 最新英语语音教案13406
- 大学生报社实习暑期社会实践报告
- 2021年汽车销售工作总结【5篇汇总】
- 租赁土地使用权合同
- 无锡市饮用水水源保护办法
- 日本3G市场发展给我们的启示
- C++学生成绩管理系统课程设计报告