【学生成绩管理系统】 大二c语言作业
几年前写的了,只能在命令行窗口运行,虽然比较挫,还是有一定参考价值...
#include <cstdio>
#include <conio.h>
#include <iostream>
#include <process.h>
#include <stdlib.h>
#include <algorithm>
#include <cstring>
#include <cmath>
#define N 5
;
using namespace std;
void log_in(); // 登录系统
void menu(); // 菜单
void input(); // 输入数据
void savecore(); // 保存数据
void loadscore(); // 读取文件
void stdavg(); // 求平均数的算法
void delete_(); // 删除一个已知学号的学生的全部信息,并选择是否排序
void passrate(); // 及格率
void variance(); // 均方差
void browse(); // 显示数据
void function(); // 个性设计模拟动态链表实现增加n个学生成绩并排序
void read(); // 以下四个函数为实现function功能的嵌套函数
void add();
void output();
void solve();
typedef struct student
{
int number;
];
float math;
float english;
float computer;
float average;
bool operator <(const struct student &a)const // c++的sort排序
{
return average>a.average;
}
}STU;
STU stu[N];
typedef struct func_ //个性化设计结构体
{
]; //姓名
int no; //学号
int score; //分数
}NODE;
NODE node[maxn];
int top;
int cmp(const func_ &a,const func_ &b) // c++中sort函数排序
{
return a.score > b.score;
}
int main()
{
log_in();
menu();
;
}
void log_in()
{
short i;
],key[];
cout << "欢迎进入教务综合管理系统登陆界面,请输入您的用户名和密码" << endl;
cout << "初次登录用户名为yang,密码为grade_system " << endl;
cout << endl;
)
{
cout << "please input the user's name:(中间请用_间隔)" << endl;
cin >> name;
cout << "please input your key(12 bits):" << endl;
;i<;i++)
{
key[i]=getch();
printf("*");
}
key[i]='\0';
getch();
&&strcmp(key,)break;
cout << "\nerror!" << endl;
cout << "please input again!" <<endl;
}
cout << "great!wait a minute..." << endl ;
system("cls");
}
void menu()
{
char ch;
)
{
cout << " \t\t欢迎进入教务综合管理系统登陆界面!\n" <<endl;
cout << " \t\t* * * * * * * * * * * * * * * * * * * * *" << endl;
cout << " \t\t* \t Menu: \t*" << endl;
cout << " \t\t* \t0. input \t*" << endl;
cout << " \t\t* \t1. savecore \t*" << endl;
cout << " \t\t* \t2. loadcore \t*" << endl;
cout << " \t\t* \t3. delete \t*" << endl;
cout << " \t\t* \t4. passrate \t*" << endl;
cout << " \t\t* \t5. variance \t*" << endl;
cout << " \t\t* \t6. grade chart \t*" << endl;
cout << " \t\t* \t7. personality design \t*" << endl;
cout << " \t\t* \t8. Exit \t*" << endl;
cout << " \t\t* * * * * * * * * * * * * * * * * * * * *" <<endl;
cout << "\t\t\t请选择对应序号: ";
cin >> ch;
switch(ch)
{
':{input();break;};
':{savecore();break;};
':{loadscore();break;}
':{delete_();break;};
':{passrate();break;};
':{variance();break;};
':{browse();break;};
':{function();break;};
);};
default:cout << "input wrong,please input again!" <<endl;
}
getchar ();
}
}
void input()
{
int i,j;
struct student *p=stu;
cout << "now please begin to input the student's data:" << endl;
cout << "注意:学号为int型,姓名之间若有间隔一定用连接,分数之间加空格" << endl;
cout << endl;
;i<N;i++)
{
j=i+;
cout << "input" << ' ' << j <<
"'s number name and the score of the math english computer:" << endl;
cin >> (p+i)->number;
cin >> (p+i)->name;
cin >> (p+i)->math;
cin >> (p+i)->english;
cin >> (p+i)->computer;
}
cout << "Now we have already input all the data!" << endl;
}
void savecore()
{
FILE *fp;
struct student *q=stu;
int i;
char ch;
getchar();
cout << "next,do you want to save file?(Y/N)" << endl;
if((ch=getchar())=='Y')
{
if((fp=fopen("d:\\score.txt","w"))==NULL)
{
cout << "File open error!" << endl;
exit();
}
;i<N;i++,q++)
{
,fp)==)
{
)
{
cout << "you have saved successfully!" << endl;
cout << "press enter to continue" << endl;
}
}
else cout << "file write wrong!" <<endl;
}
getchar();
fclose(fp);
}
}
void loadscore()
{
FILE *fp;
int i;
char ch;
getchar();
printf("do you want to open the file?(Y/N)\n");
if((ch=getchar())=='Y')
{
if((fp=fopen("d:\\score.txt","r"))==NULL)
{
cout << "File open error!" <<endl;
exit();
}
;!feof(fp);i++) //测试文件是否结束
{
fread(&stu[i],,fp);
}
//原型为unsigned fwrite(void *buffer,unsigned size,unsigned count,FILE *fp)
cout << "you have loaded successfully!" << endl;
cout << "press enter to continue" << endl;
getchar();
fclose(fp);
}
}
void browse()
{
stdavg();
sort(stu,stu+N);
int i;
]={" ","Numb","Name","Math","Engl","Comp","Aver"};
printf("\n\n\nNow the chart of student's grade is as below:\n");
printf("***************************************************************************\n\t");
;i<;i++)
{
printf("%s\t",chart[i]);
}
printf("\n");
;i<N;i++)
{
printf(" \t%ds \t%.2f \t%.2f \t%.2f \t%.2f",stu[i].number,stu[i].name,stu[i].math,
stu[i].english,stu[i].computer,stu[i].average);
printf("\n");
}
printf("\n");
printf("***************************************************************************\n");
}
void stdavg()
{
int i;
float s;
;i<N;i++)
{
s=;
s+=stu[i].math+stu[i].english+stu[i].computer;
stu[i].average=s/;
}
}
void passrate()
{
;
int i;
stdavg();
;i<N;i++)
{
)
{
count_++;
}
}
s=count_/N*;
cout << "the passrate is " << s << '%' << endl;
cout << endl;
}
void read()
{
int n,i;
top = ;
cout << "请输入当前学生人数" << endl;
cin >> n;
cout << "请输入学生的名字,学号(这里默认为int),分数(中间用空格间隔)" << endl;
;i<n;i++)
{
scanf("%s %d %d",node[top].name,&node[top].no,&node[top].score);
)
{
top++;
}
}
}
void add()
{
cout << "please input:" << endl;
cin >> node[top].name ;
cin >> node[top].no;
cin >> node[top].score;
)
{
top++;
}
}
void output()
{
sort(node,node+top,cmp);
;i<top;i++)
{
printf("%s %d %d\n",node[i].name,node[i].no,node[i].score);
}
}
void solve()
{
int judge;
cout << "提示:" << endl;
cout << "输入'0'结束" << endl;
cout << "输入'1'增加学生操作" << endl;
cout << "输入'2'输出及格学生当前排榜单" << endl;
while(scanf("%d",&judge) && judge)
{
)
{
add();
cout<<"\n提示:输入'0'结束\n输入'1'增加学生操作\n输入'2'输出及格学生当前排榜单\n"<<endl;
}
)
{
cout <<"当下所有及格学生的排名情况如下\n" << endl;
output();
cout<<"\n提示:输入'0'结束\n输入'1'增加学生操作\n输入'2'输出及格学生当前排榜单\n"<<endl;
}
}
}
void function()
{
cout << "现在我们进入综合的个性类学生成绩管理系统" << endl;
cout << "本个性设计旨在仿照malloc的动态分配内存" << endl;
cout << endl;
read();
solve();
}
void delete_()
{
int i,j,m;
char ch;
stdavg();
cout << "input the number you want to delete_:\n" << endl;
cin >> m;
getchar(); //
cout << "numb" << '\t' << "name" << '\t' << "math" << '\t' <<
"endl" << '\t' << "comp" <<'\t' << "aver" <<endl;
;j<N;j++)
{
if(stu[j].number!=m)
{
cout << stu[j].number << '\t' <<stu[j].name << '\t' <<
stu[j].math << '\t' << stu[j].english << '\t' <<
stu[j].computer << '\t' << stu[j].average << endl;
}
}
cout << "若之前进行过显示数据操作(即菜单中的第六项操作)则已经排序好,否则为输入顺序" << endl;
cout << "do you want to sort the grade(Y/N) ?" << endl;
ch=getchar();
struct student s;
if(ch=='Y')
{
getchar();
if(stu[j].number!=m)
{
;i<N-;i++)
{
;j<N;j++)
{
if(stu[j].average>stu[i].average)
{
s=stu[i];
stu[i]=stu[j];
stu[j]=s;
}
}
}
}
cout << "now the sorted chart is:" <<endl;
cout << "numb" << '\t' << "name" << '\t' << "math" << '\t' <<
"endl" << '\t' << "comp" <<'\t' << "aver" <<endl;
;j<N;j++)
{
if(stu[j].number!=m)
{
cout << stu[j].number << '\t' <<stu[j].name << '\t' <<
stu[j].math << '\t' << stu[j].english << '\t' <<
stu[j].computer << '\t' << stu[j].average << endl;
}
}
}
cout <<"press enter to continue" << endl;
}
void variance()
{
,sum=,sum_,var;
int i;
stdavg();
;i<N;i++)
{
s=s+stu[i].average;
}
var=s/N;
;i<N;i++)
{
sum+=(stu[i].average-var)*(stu[i].average-var);
}
sum_= sum/N;
cout << "the all student's average variance is :" << sum_ << endl;
}
帮别人调试的另一个版本
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#define N 100
#define M 3
#define LEN 9
void menu();
void browse();
typedef struct student
{
];
];
int score[M];
double ave;
}STU;
STU stu[N];
int save(int n)
{
FILE *fp;
int i;
if((fp=fopen("tangjie.txt","wb"))==NULL)
{
printf("无法打开文件!\n任意键退出程序... ...\n");
getch();
;
}
;i<n;i++)
)
,fp)!=)
printf("文件写入发生错误\n");
fclose(fp);
;
}
int load()
{
FILE *fp;
int i;
if((fp=fopen("tangjie.txt","rb"))==NULL) //以二进制读的方式打开
{
printf("无法打开文件!\n任意键退出程序... ...\n"); //显示不能打开文件的信息
getch(); //预防闪屏
;
}
;!feof(fp);i++)
fread(&stu[i],,fp); //将文件数据读入学生结构体
fclose(fp);
); //返回目前总的记录个数*/
}
void printf_back()
{
int w;
printf("\n\t操作成功!\n");
printf("\t请选择!\n\t1).立刻浏览全部数据\t2).返回:[ ]\b\b");
scanf("%d",&w);
)
browse();
else
menu();
}
void printf_face()
{
printf("\n\t学号\t姓名\t\t 数学\t 英语 C语言 平均分\n");
}
void average(int i)
{
int j,sum;
,j=;j<M;j++)
sum+=stu[i].score[j];
stu[i].ave=sum*1.0/M;
}
void no_deal(int i)
{
int j,l,a;
l=strlen(stu[i].num);
if(l<LEN)
{
;j<LEN;j++)
{
stu[i].num[j]=stu[i].num[a++];
}
stu[i].num[i]='\0';
;a<LEN-l;a++)
stu[i].num[a]=';
}
if(l>LEN)
stu[i].num[l]='\0';
}
int no_input(int i,int n)
{
int j,k,w1;
do{
w1=;
printf("学号:\t\t 【%d位,低于%d位前面补0,长的截尾处理!】\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b",LEN,LEN);
scanf("%s",stu[i].num);
no_deal(i);
;stu[i].num[j]!='\0';j++)
')
{
puts("请输入0~9的数字!\n");
w1=;
break;
}
)
;k<n;k++)
)
{
puts("已存在!\n");
w1=;
break;
}
}
);
;
}
int score_input(int i)
{
int j;
;j<M;j++)
{
printf();
scanf("%d",&stu[i].score[j]);
}
;
}
void input(int i)
{
no_input(i,i);
printf("姓名:");
scanf("%s",stu[i].name);
score_input(i);
average(i);
}
void printf_one(int i)
{
int j;
printf("s %-14s",stu[i].num,stu[i].name);
;j<M;j++)
printf("�",stu[i].score[j]);
printf(" %9.2f\n",stu[i].ave);
}
void topput___()
{
printf("\n 记 录浏览 ");
printf("\n--------------------------------------------------------------------------------\n");
}
void puts___()
{
printf("\n\n--------------------------------------------------------------------------------\n");
}
int modify_data(int i,int n)
{
int c,w1;
do
{
puts("\n请选择修改项: =>\n\n1).学号\t2).姓名\t3).数学\t4).英语\t5).C语言\n6).重输所有分数\t7).重输所有记录\t8).取消并返回");
printf("请选择:[ ]\b\b");
scanf("%d",&c);
|| c<)
{
puts("\n选择错误");
getchar();
}
} || c<);
do
{
switch(c)
{
:no_input(i,n);break;
:printf("姓名:");scanf("%s",stu[i].name);break;
:printf(]);break;
:printf(]);break;
:printf(]);break;
:score_input(i);break;
:input(i);break;
:menu();
}
&& c<)
average(i);
puts("\n现在:\n");
printf_face();
printf_one(i); //显示修改后的数据
printf("\n确定当前的决定?\n\n\t1).是 \t2).否\n\t3).不保存退出[ ]\b\b");
scanf("%d",&w1);
});
return w1; //返回控制值
}
void enter()
{
int i,n;
system("CLS"); //引用外部清屏
printf("输入要记录的学生数:(1~%d)?\t['0'返回]:\n",N);
scanf("%d",&n); //要输入的计入个数
)
menu(); //输 0 的时候返回
else
{
printf("\n\t开始输入...\n");
;i<n;i++)
{
printf();
input(i); //调用输入函数
}
)
save(n); //调用保存函数
printf_back();
}
}
int add()
{
int i,n,m,k;
FILE *fp;
system("CLS");
n=load(); //获得总记录的个数,并加载记录
printf("需要加入的学生人数:(0 ~ %d)?:",N-n);
scanf("%d",&m); //输入要追加记录的个数
)
menu();
else
{
k=m+n;
for(i=n;i<k;i++)
{
printf();
input(i); //调用输入函数
}
if((fp=fopen("tangjie.txt","ab"))==NULL)
{
printf("文件无法打开!\n"); //显示不能打开文件的信息
getch();
;
}
for(i=n;i<k;i++)
,fp)!=)
printf("文件写入错误!\n");
fclose(fp);
printf_back();
}
;
}
void modify()
{
struct student s;
,w1,w2=;
n=load(); //获得总记录的个数,并加载记录
do
{
system("CLS");
k=-;
topput___();
printf_face();
;i<n;i++)
printf_one(i); //调用显示一个记录的函数
puts___();
do
{
printf("\n\n输入要修改记录的学号! :\t");
) //输入要修改数据的学号
menu();
;i<n;i++) //查找要修改的数据
)
{
k=i; //找到要修改的记录
s=stu[i];
}
)
printf("\n\n不存在! 请重新输入");
});
printf_face(); //调用显示数据结构项目函数
printf_one(k);
w1=modify_data(k,n);
) //代表确认修改
{
printf("\n操作成功!\n\n决定修改其他信息吗?\n\n\t1).是的\t2).不!保存并返回\t[ ]\b\b");
scanf("%d",&w0);
w2=;
}
else
{
w0=;
)
stu[k]=s;
}
&& w2==)
save(n);
});
menu(); //返回主菜单
}
void del()
{
struct student s;
;
system("CLS");
n=load(); //获得总记录的个数,并加载记录
do
{
system("CLS");
k=-;
topput___();
printf_face();
;i<n;i++)
)
printf_one(i); //显示所有数据
puts___();
do
{
printf("\n\n输入你要删除记录的学号! NO.:\t");
)
menu();
;i<n;i++)
)
{
k=i;
s=stu[i];
}
)
printf("\n\n不存在! 请重新输入!");
});
puts("\n");
printf_face();
printf_one(k); //显示要删除的记录
printf("\n确定?\n\t1).是 2).否 3).不保存退出[ ]\b\b");
scanf("%d",&c);
)
{
stu[k].ave=;
printf("\n\n操作成功!\n\n要继续删数据吗?\n\t1).继续 2).返回主菜单\t[ ]\b\b");
scanf("%d",&w0);
}
)
w0=; //不删除直接返回
&& c!=)
save(n);
});
menu();
}
void browse()
{
int i,n;
n=load(); //获得总记录的个数,并加载记录
system("CLS");
topput___();
printf_face();
;i<n;i++) //循环输出所有学生的信息
printf_one(i);
puts___();
printf("\n\t 这里一共有 %d 个记录!\n",n);
printf("\n\t 输入任意键返回主菜单... ...");
getch();
menu();
}
void search()
{
,w2,w3,w4;
struct student s;
system("CLS");
n=load(); //获得总记录的个数,并加载记录
do
{
do
{
k=-;
printf("\n\n输入你要查找记录的姓名:");
scanf("%s",s.name);
printf_face();
;i<n;i++)
)
{
k=i;
printf_one(k); //考虑到同名的情况,可能输出不只一个,把所有的记录都查找一下
}
) //没找到相同的
{
printf("\n\n不存在! 请重新输入!");
printf("\n\n继续?\n\t1).是\t 2).否 \t[ ]\b\b");
scanf("%d",&w1);
}
} && w1!=);
w4=w3=;
)
{
printf("\n\n接着干什么?\n\t1).再次查找 2).修改 3).删除 4).返回主菜单 [ ]\b\b");
scanf("%d",&w2);
switch(w2)
{
:w3=modify_data(k,n);break;
:
{
printf("\n\n确定?\n\t1).是 2).否 \t[ ]\b\b");
scanf("%d",&w4);
) //表示确定删除
stu[k].ave=;
break;
}
}
|| w4==)
{
save(n);
printf("\n\n操作成功!");
printf("\n\n继续\n\t1).再次查找 2).返回 [ ]\b\b");
scanf("%d",&w2);
}
}
});
menu();
}
void order()
{
int i,j,k,n;
struct student s;
system("CLS"); //清屏
n=load(); //获得总记录的个数,并加载记录
;i<n-;i++)
{
k=i;
;j<n;j++)
if(stu[j].ave>stu[k].ave) //选择法排序,按平均分降序
k=j;
s=stu[i];
stu[i]=stu[k];
stu[k]=s;
}
save(n);
puts("\n\n");
printf_back();
}
void menu()
{
int n,w1;
do
{
system("CLS");;
puts("\n\t\t\t\t学生信息管理系统\n");
puts("\t ------- 汤杰 \n");
puts("\t ************************ 主菜单 *********************\n\n");
puts("\t\t\t 1.学生信息及成绩录入");
puts("\t\t\t 2.添加信息");
puts("\t\t\t 3.修改信息");
puts("\t\t\t 4.删除信息");
puts("\t\t\t 5.输出统计结果");
puts("\t\t\t 6.查询信息");
puts("\t\t\t 7.成绩排序");
puts("\t\t\t 0.退出系统");
puts("\n\n\t ****************************************************\n");
printf("\t输入你的选择(0~7):[ ]\b\b");
scanf("%d",&n);
|| n>)
{
w1=;
printf("\t你的选择不再 0 到 7 之间,按任意键重新输入!");
getch();
}
else
w1=;
});
switch(n)
{
:enter();break;
:add();break;
:modify();break;
:del();break;
:browse();break;
:search();break;
:order();break;
:exit();break;
}
}
void main()
{
menu();
}
【学生成绩管理系统】 大二c语言作业的更多相关文章
- Java项目:学生成绩管理系统(二)
学生成绩管理系统(二):项目介绍 一.设计要求: 1.1 简单的图形界面登录功能. 1.2 对数据库的的信息的查询功能. 1.3 对数据库的的信息的修改功能. 1.4 对数据库的的信息的删除功能. 1 ...
- 从零开始的C程序设计大作业——学生成绩管理系统
前言 学生成绩管理系统可以说是C语言程序设计的结课的必备大作业了.花了些时间,费了些头发肝了下,完成了两个系统,一个是控制台版本的,另一个用easyx图形库进行了优化. 先放出完成后的演示图片占个坑. ...
- 第一次写C语言小程序,可以初步理解学生成绩管理系统的概念
1 成绩管理系统概述 1.1 管理信息系统的概念 管理信息系统(Management Information Systems,简称MIS),是一个不断发展的新型学科,MIS的定义随着科技的进步也在 ...
- [项目记录] 用c语言完成的一个学生成绩管理系统
一.要求: 学生成绩管理系统 某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输入).使用链表编程实现如下菜单驱动的学生成绩管理系统. 从文件读入每个学生个人信 ...
- C语言项目:学生成绩管理系统
C语言项目:学生成绩管理系统 1.数据结构:学生信息:学号.姓名.年龄.性别.3课成绩 2.功能: (1)增加学生记录 (2) 删除学生记录 (3) 查找学生信息(学号 ...
- C语言实现---学生成绩管理系统
C语言实现了学生成绩管理系统,可以进行学生成绩的增加,删除,更新,查询,计算和展示. 完整代码如下: #include<stdio.h> #include<stdlib.h> ...
- C语言利用结构体数组实现学生成绩管理系统
这篇文章主要为大家详细介绍了C语言利用结构体数组实现学生成绩管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 要求: 某班有最多不超过30人(具体人数由键盘输入) ...
- 《C语言编写 学生成绩管理系统》
/* (程序头部凝视開始) * 程序的版权和版本号声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名: 学生成绩管理 ...
- C语言练手自己编写学生成绩管理系统
#include<stdio.h> #include<stdlib.h> /*定义学生结构体*/ struct Student { ]; ]; float Mark1; flo ...
随机推荐
- 二〇一五年五月二十二日--bug--启动页面出现模糊的问题
启动页面出现模糊的问题: 原因是 :android:theme="@style/TranslucentTheme" <application android:name=&qu ...
- [转载]C#控制台应用程序里调用自己写的函数的方法
(2011-08-15 15:52:13) 转载▼ 标签: 转载 分类: 技术类 原文地址:C#控制台应用程序里调用自己写的函数的方法作者:萧儿 最近写程序,遇到了一个很白痴的问题,记录下来,免得下次 ...
- hdu_1429_胜利大逃亡(续)(BFS状压)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 题意:迷宫的加强版,迷宫里有钥匙和门,问在指定的时间下能否逃出 题解:用二进制位来记录是否有该门 ...
- Centos中压缩(zip)和解压(unzip)命令
摘自:http://liuzhichao.com/p/681.html 1.我下载了一个yasuo.zip文件,想解压缩: # unzip yasuo.zip 2.我当前目录下有abc1.zip,ab ...
- servlet第2讲(上集)----创建servlet实例(实现servlet接口)
- OS X快捷键最最齐全版(官方版)
看大家不时的都在将系统发快捷键最新版,在官网上其实就有这个最详细的信息,为了方便大家.另外系统快捷键不会更新那么快,也就不存在最新版了.小弟现将原文转发过来,希望对新入门或需要的小伙伴有帮助.OS X ...
- could not perform addBatch
在执行存数据到数据库的操作时,由于增加的ID值小于或等于对应的索引值时会报这个错误
- java web服务器tomcat介绍【转载】
机器矩阵2016-08-10 22:14 java程序员亲切地称他为tom猫,看到这只猫可以说明1 服务器部署成功了 ,2 网络是联通的. 到底这只猫是什么来头呢? tomcat是Apache基金会下 ...
- textarea内容太多, 鼠标点击全部显示
strRight+="<td bordercolor='#DEDEDE' width='500px' height='50'><div title='"+data ...
- Linux非root用户程序使用小于1024端口
在Linux下,默认端口1024下的是要在root下才能使用的,在其他用户下,如果尝试使用将会报错.在有的时候,我们可能考虑程序运行在root帐户下,可能会给Linux系统带来安全风险.那如何能够让非 ...