C语言 基于C语言学生成绩管理系统编程设计 实现增、删、改、查、成绩排序、保存当前录入得全部学生信息和成绩,程序启动时需要打开上次保存得数据文件,读入到内存中。
文章目录基于C语言学生成绩管理系统编程设计要流程框图代码内容效果展示总结基于C语言学生成绩管理系统编程设计要1.系统功能:(1)通过菜单的形式实现人机交互界面(2)实现录入学生基本信息和成绩功能(3)实现删除指定学生的基本信息和成绩功能(4)实现修改指定学生的基本信息和成绩功能(5)实现查询指定学生的基本信息和成绩功能(6)对学生成绩实现从大到小排序(7)保存当前录入得全部学生信息,程序启动时需要
·
基于C语言学生成绩管理系统编程设计要
1.系统功能:
(1)通过菜单的形式实现人机交互界面
(2)实现录入学生基本信息和成绩功能
(3)实现删除指定学生的基本信息和成绩功能
(4)实现修改指定学生的基本信息和成绩功能
(5)实现查询指定学生的基本信息和成绩功能
(6)对学生成绩实现从大到小排序
(7)保存当前录入得全部学生信息,程序启动时需要打开上次保存得数据文件,读入到结构体中。
(8)每次执行完操作需要清屏
流程框图
代码内容
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define N 20
int length=0;
struct Student{
int num; //学号
char name[9]; //姓名
char sex; //性别
float grade; //成绩
}s[N+1]; //结构体数组,s[0]用作哨兵
void display(){
printf("★☆☆☆☆学生成绩管理系统☆☆☆☆★\n");
printf(" ★|1.添加学生信息|★\n");
printf(" ★|2.显示学生信息|★\n");
printf(" ★|3.按成绩排序 |★\n");
printf(" ★|4.查找单个学生|★\n");
printf(" ★|5.删除指定学生|★\n");
printf(" ★|6.修改学生信息|★\n");
printf(" ★|0.退出该程序 |★\n");
printf("★☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆★\n");
printf("请输入要使用的功能:\n");
}
//判断学号是否被占用
bool isUsed(int n){
//true:被占用,false:未被占用
bool flag=false;
for(int i=1;i<=length;i++){
if(n==s[i].num)
flag=true;
}
return flag;
}
//增添学生信息
void Add_management(struct Student *s){
printf("增添学生信息:\n");
char yn='Y';
for(int i=length+1;yn=='Y';i++){
printf("请输入学生的学号:");
while(scanf("%d",&s[i].num)){
if(isUsed(s[i].num))
printf("该学号被占用,请重新输入:\n");
else
break;
}
printf("请输入学生的姓名:");
//scanf("%s",s[i].name);
fflush(stdin); //清空默认缓冲区
gets(s[i].name);
printf("请输入学生的性别:");
//scanf("%c",&s[i].sex);
s[i].sex=getchar();
printf("请输入学生的成绩:");
scanf("%f",&s[i].grade);
fflush(stdin);
length++;
printf("是否继续录入学生信息输入Y/N\n");
//scanf("%c",&yn);
yn=getchar();
}
}
//显示全部学生信息
void Show(){
for(int i=1;i<=length;i++)
printf("学生的学号为:%d\t学生的姓名为:%s\t学生的性别为:%c\t学生的成绩为:%.2f\n",s[i].num,s[i].name,s[i].sex,s[i].grade);
}
//按成绩排序,从大到小排序
void Sort(struct Student *s){//使用冒泡排序
int flag=1; //flag用来标记某一趟排序是否发生交换
for(int i=1;i<length&&flag==1;i++){
flag=0;
for(int j=1;j<=length-i;j++){
if(s[j].grade<s[j+1].grade){
s[0]=s[j];
s[j]=s[j+1];
s[j+1]=s[0];
flag=1;
}
}
}
Show(); //显示全部学生信息
}
//查找单个学生
void Find_student(int n){
int flag=0;//用于标记是否找到该学生
for(int i=1;i<=length;i++){
if(n==s[i].num){
flag=1;
printf("学生的学号为:%d\t学生的姓名为:%s\t学生的性别为:%c\t学生的成绩为:%.2f\n",s[i].num,s[i].name,s[i].sex,s[i].grade);
break;
}
}
if(flag==0)
printf("未找到该学生\n");
}
//删除指定学生
void Delete_student(int n,struct Student *s){
int flag=0;
for(int i=1;i<=length;i++){
if(n==s[i].num){
for(int j=i;j<length;j++)
s[j]=s[j+1];
length--;
flag=1;
printf("删除成功!");
break;
}
}
if(flag==0)
printf("未找到该学生\n");
}
//修改学生信息
void Set_student(int n,struct Student *s){
int flag=0;
for(int i=1;i<=length;i++){
if(n==s[i].num){
flag=1;
printf("请输入学生的姓名:");
fflush(stdin); //清空默认缓冲区
gets(s[i].name);
printf("请输入学生的性别:");
s[i].sex=getchar();
printf("请输入学生的成绩:");
scanf("%f",&s[i].grade);
printf("修改完毕!\n");
break;
}
}
if(flag==0)
printf("未找到该学生\n");
}
void read_file(struct Student *s){
FILE *fp=fopen("D:\\coding\\c\\management.txt","r"); //定义文件指针,并打开文件
if(fp==NULL){//未找到文件,文件指针就为空
printf("文件打开出错!\n");
exit(0); //退出程序
}
for(int i=1;!feof(fp);i++){
fread(&s[i],sizeof(struct Student),1,fp);//把文件的内容读入到学生的结构体中
//fscanf(fp,"%d%s%c%f",&s[i].num,s[i].name,&s[i].sex,&s[i].grade);
length++;//学生个数加一
}
length-=1;
fclose(fp);//释放文件
}
void write_file(){
FILE *fp=fopen("D:\\coding\\c\\management.txt","w");//定义文件指针,并打开文件
if(fp==NULL){//未找到文件,文件指针就为空
printf("文件打开出错!\n");
exit(0); //退出程序
}
for(int i=1;i<=length;i++){
fwrite(&s[i],sizeof(struct Student),1,fp);//把结构体的内容转入到文件中
}
fclose(fp);//释放指针
}
int main(){
read_file(s);//导入学生信息
display();//操作界面
int n,t;
while(scanf("%d",&n)){
switch(n){
case 1:
Add_management(s); //输入学生信息
system("pause"); //暂停函数
system("cls"); //清屏函数
display();//操作界面
break;
case 2:
Show(); //显示全部学生信息
system("pause");
system("cls");
display();
break;
case 3:
Sort(s); //按成绩排序,从大到小排序
system("pause");
system("cls");
display();
break;
case 4:
printf("请输入学生学号:");
scanf("%d",&t);
Find_student(t); //查找单个学生
system("pause");
system("cls");
display();
break;
case 5:
printf("请输入学生学号:");
scanf("%d",&t);
Delete_student(t,s); //删除指定学生
system("pause");
system("cls");
display();
break;
case 6:
printf("请输入学生学号:");
scanf("%d",&t);
Set_student(t,s); //修改学生信息
system("pause");
system("cls");
display();
break;
case 0:
printf("欢迎下次使用!\n");
write_file();//保存学生信息
exit(0);
default:
printf("请重新输入!\n");
break;
}
}
return 0;
}
效果展示
1.操作界面
2.添加学生信息
3.显示学生信息
4.按成绩排序并输出
5.查找单个学生
6.删除学生信息
7.修改学生信息
8.退出程序
*9.再次打开程序
总结
这次试验让我受益颇深,对C语言又有了新的认知,现在学到的只是还是比较浅显的,设计出来的这个程序还是有很多地方可以改善完善的,比如代码的健壮性和高效性都略有不足,这些都需要自己课后再下功夫。
本程序旨在训练我们的C语言基本编程能力,通过串联C语言输入输出、循环语句、子函数设计、数组、结构体、文件输入输出等知识点,完成一个简单系统的设计开发。
更多推荐
已为社区贡献1条内容
所有评论(0)