学生成绩信息管理系统
- 存储结构设计
设计 学生结构体 。 - 编程要求
(1) 结构体设计
1----------学生信息录入
2---------- 学生信息浏览
3---------- 学生信息查询
4---------- 学生信息删除
5---------- 学生成绩统计
0---------- 退出系统 - 功能和函数设计要求
任务
通过函数完成各个菜单模块的功能, 要求合理设计主函数和各个子函数, 合理设计各个
函数之间的调用关系。
编程要求 - 主函数:显示主菜单。
- 如果设计并编写登陆菜单,要求合理设计登陆界面,要求用户输入用户名和密码,如果
全都正确则进入主菜单,如果有一项不对,系统再提供两次机会输入,三次都错退出系
统。编写函数完成 “学生录入” 功能, 要求能将用户由键盘输入的若干学生信息追加到
student.txt 或 student.dat 中, 存储结构可以使用数组,也可以使用链表 。 - 编写函数完成 “学生浏览” 功能, 要求能将 student.txt 或 student.dat 文件中的全部
学生信息显示出来, 存储结构 可以使用数组,也可以使用链表 。 - 编写函数完成 “学生查询” 功能, 要求能按照学号或姓名对学生进行查询。
- 编写函数完成 “学生删除” 功能, 要求按照学号或姓名将某个学生删除,并将删除后的
结果写回到文件中,此功能要求存储结构 必须使用链表 。 - 设计并编写编写函数完成 “成绩统计” 功能,可以对“英语成绩” 、“C 语言成绩”进行
单科浏览(降序排列) ,按某个学生统计总分和平均分,按英语和 C 语言两科成绩对学
生进行排序。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct student{
char num[20];
char name[20];
char sex[20];
int escore;
int cscore;
int sum;
};
void login();
void input(struct student *sp,int n);
void output(struct student *sp,int n);
void find(struct student *sp,int n);
int dele(struct student *sp,int n);
void sort(struct student *sp,int n);
int main(){
int choice,n;
struct student stu[20];
login();
system("cls");
while(1){
printf("**********************\n");
printf(" 1---学生信息录入\n");
printf(" 2---学生信息浏览\n");
printf(" 3---学生信息查询\n");
printf(" 4---学生信息删除\n");
printf(" 5---学生信息统计\n");
printf(" 0---退出系统\n");
printf("**********************\n");
scanf("%d",&choice);
switch(choice){
case 1:
printf("请输入人数:");
scanf("%d",&n);
input(stu,n);
break;
case 2:
output(stu,n);
break;
case 3:
find(stu,n);
break;
case 4:
n=dele(stu,n);
break;
case 5:
sort(stu,n);
break;
case 0:
exit(0);
break;
default:printf("输入有误,请重新输入!\n");
}
}
}
void login(){
system("cls");
int choice,i;
char username[20];
char password[20];
while(1){
printf("**********************\n");
printf(" 1---学生信息录入\n");
printf(" 0---退出系统\n");
printf("**********************\n");
scanf("%d",&choice);
if(choice==0)
exit(0);
else if(choice==1){
for(i=0;i<3;i++){
printf("输入用户名:\n");
scanf("%s",username);
printf("输入密码:\n");
scanf("%s",password);
getchar();
if(strcmp(username,"phn")==0&&strcmp(password,"123456")==0){
system("cls");
printf("欢迎光临\n");
break;
}
else{
system("cls");
printf("你还有%d次机会\n",3-i-1);
}
}
if(i==3)
exit(0);
break;
}
else
printf("输入有误\n");
}
}
void input(struct student *sp,int n){
system("cls");
int i;
for(i=0;i<n;i++){
printf("请输入学号:");
scanf("%s",sp[i].num);
printf("请输入姓名:");
scanf("%s",sp[i].name);
printf("请输入性别:");
scanf("%s",sp[i].sex);
printf("请输入英语成绩:");
scanf("%d",&sp[i].escore);
printf("请输入C语言成绩:");
scanf("%d",&sp[i].cscore);
sp[i].sum=sp[i].escore+sp[i].cscore;
}
getchar();
}
void output(struct student *sp,int n){
system("cls");
int i;
printf("序号 学号 姓名 性别 英语成绩 C语言成绩 总成绩\n");
for(i=0;i<n;i++){
printf("%d\t",i+1);
printf("%s\t",sp[i].num);
printf("%s\t",sp[i].name);
printf("%c\t",sp[i].sex);
printf("%d\t",sp[i].escore);
printf("%d\t",sp[i].cscore);
printf("%d\t",sp[i].sum);
}
printf("\n");
}
void find(struct student *sp,int n){
system("cls");
int choice,i,fn=0;
char findnum[20],findname[20];
printf("**********************\n");
printf(" 1---按学号查询\n");
printf(" 2---按姓名查询\n");
printf("**********************\n");
scanf("%d",&choice);
if(choice==1){
printf("请输入查询的学号:\n");
scanf("%s",findnum);
for(i=0;i<n;i++){
if(strcmp(findnum,sp[i].num)==0){
fn++;
if(fn==1){
printf("序号 学号 姓名 性别 英语成绩 C语言成绩\n");
printf("%s\t",sp[i].num);
printf("%s\t",sp[i].name);
printf("%c\t",sp[i].sex);
printf("%d\t",sp[i].escore);
printf("%d\t",sp[i].cscore);
}
}
}
if(fn==0){
system("cls");
printf("没有该学生\n");
}
}
else if(choice==2){
printf("请输入查询的姓名:\n");
scanf("%s",findname);
for(i=0;i<n;i++){
if(strcmp(findnum,sp[i].num)==0){
fn++;
if(fn==1){
printf("序号 学号 姓名 性别 英语成绩 C语言成绩\n");
printf("%s\t",sp[i].num);
printf("%s\t",sp[i].name);
printf("%c\t",sp[i].sex);
printf("%d\t",sp[i].escore);
printf("%d\t",sp[i].cscore);
}
}
}
if(fn==0){
system("cls");
printf("没有该学生\n");
}
}
else
printf("输入有误\n");
}
int dele(struct student *sp,int n){
system("cls");
int choice,i,j,fn=0;
char delenum[20],delename[20];
printf("**********************\n");
printf(" 1---按学号删除\n");
printf(" 2---按姓名删除\n");
printf("**********************\n");
scanf("%d",&choice);
if(choice==1){
printf("请输入删除的学号:\n");
scanf("%d",&delenum);
for(i=0;i<n;){
if(strcmp(delenum,sp[i].num)==0){
fn++;
for(j=i;j<n-1;j++){
sp[j]=sp[j+1];
}
n--;
}
else
i++;
}
if(fn==0){
system("cls");
printf("没有该学生\n");
}
}
else if(choice==2){
printf("输入删除的姓名:\n");
scanf("%s",delename);
for(i=0;i<n;){
if(strcmp(delename,sp[i].name)==0){
fn++;
for(j=i;j<n-1;j++){
sp[j]=sp[j+1];
}
n--;
}
else
i++;
}
if(fn==0){
system("cls");
printf("没有该学生\n");
}
}
else
printf("输入有误\n");
return n;
}
void sort(struct student *sp,int n){
system("cls");
int choice,i,j;
struct student temp;
char delenum[20],delename[20];
printf("**********************\n");
printf(" 1---按英语成绩排序\n");
printf(" 2---按C语言成绩排序\n");
printf(" 3---按总成绩排序\n");
printf("**********************\n");
scanf("%d",&choice);
system("cls");
if(choice==1){
for(i=0;i<n-1;i++){
for(j=0;j<n-i-1;j++){
if(sp[j].escore<sp[j+1].escore){
temp=sp[j];
sp[j]=sp[j+1];
sp[j+1]=temp;
}
}
}
}
else if(choice==2){
for(i=0;i<n-1;i++){
for(j=0;j<n-i-1;j++){
if(sp[j].cscore<sp[j+1].cscore){
temp=sp[j];
sp[j]=sp[j+1];
sp[j+1]=temp;
}
}
}
}
else if(choice==3){
for(i=0;i<n-1;i++){
for(j=0;j<n-i-1;j++){
if(sp[j].sum<sp[j+1].sum){
temp=sp[j];
sp[j]=sp[j+1];
sp[j+1]=temp;
}
}
}
}
else
printf("输入有误\n");
}