基于c语言设计学生管理系统
程序员文章站
2022-05-05 23:12:50
...
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//创建学生结构
struct stu_type
{
char num[15];//学生学号
char name[10];//学生姓名
char gender[10];//学生性别
int dormitory_num;//学生宿舍号
char phone_num[20];//学生电话号码
int c;//学生成绩
};
struct stu_type stu[100];
int stu_num=0;//初始化学生个数为0
void add(); //添加信息
int display(char str[]);//显示信息
void id_find();//学号id查找
void name_find();//name查找
void sort_jx();//按成绩降序排序
void sort_sx();//按成绩升序排序
void save_txt();//保存txt信息
void load_txt();//查询txt信息
void main()
{
while(1)
{
int choice;//可以选择的int类型的号码
printf("\n 欢迎使用学生信息管理系统\n");
printf("--------------------------------------------\n");
printf("1.添加学生信息 2.显示学生信息\n");
printf("3.(学号)查找学生信息 4.(姓名)查找学生信息\n");
printf("5.按成绩排序降序 6.按成绩排序升序\n");
printf("7.保存至文本文件 8.从文本文件读入\n");
printf("9.退出程序\n");
printf("--------------------------------------------\n");
printf("请选择功能模块,输入数字1-9");
while(1)
{
scanf("%d",&choice);
if(choice>=1 && choice<=9)
break;
else
printf("输入数字不正确,请重输入1-9:");
}
switch(choice)
{
case 1: add(); break;//添加信息
case 2: display(""); break;//显示,默认是输入字符串长度为0
case 3: id_find(); break;//按学生学号查找
case 4: name_find(); break;//按学生姓名查找
case 5: sort_jx(); break;//按成绩降序
case 6: sort_sx(); break;//按成绩升序
case 7: save_txt(); break;//保存为txt
case 8: load_txt(); break;//从本地txt读取
case 9: exit(0);//退出程序
}
}
}
//添加信息
void add()
{
int i=stu_num;
printf("说明:依次输入学生信息,当输入的学号为0时表示输入结束\n");
while(1)
{
printf("请输入第%d个学生的信息\n",i+1);
printf("请输入学号:");
scanf("%s",stu[i].num);
if(strcmp(stu[i].num,"0") == 0) break;
printf("请输入姓名:");
scanf("%s",stu[i].name);
printf("请输入性别:");
scanf("%s",&stu[i].gender);
printf("请输入数宿舍号:");
scanf("%d",&stu[i].dormitory_num);
printf("请输入电话号:");
scanf("%s",&stu[i].phone_num);
printf("请输入成绩:");
scanf("%d",&stu[i].c);
i++;
}
stu_num = i;
printf("总共已输入%d个学生的信息\n",stu_num);
}
//显示信息如果输入字符串长度为0则执行遍历功能,如果长度不为0则启动查找功能(按学号或姓名查找)
int display(char str[])
{
int i, k=-1;//设置初值
//显示信息如果输入字符串长度为0则执行遍历功能
if(strlen(str) == 0)
{
if(stu_num>0)
{
printf("学号\t姓名\t性别\t宿舍号\t电话号\t\t成绩\n");
for(i=0; i<stu_num; i++)
printf("%s\t%s\t%s\t%d\t%s\t%d\t\n",stu[i].num,stu[i].name,
stu[i].gender, stu[i].dormitory_num, stu[i].phone_num, stu[i].c);
}
else
printf("学生信息为空!");
}
//如果长度不为0则启动查找功能
else
{
for(i=0; i<stu_num; i++)
{
//按学号查找
if(strcmp(str,stu[i].num) == 0)
{
printf("学生学号\t姓名\t性别\t宿舍号\t电话号\t\t成绩\n");
printf("%s\t\t%s\t%s\t%d\t%s\t%d\t\n",stu[i].num,stu[i].name,
stu[i].gender, stu[i].dormitory_num, stu[i].phone_num, stu[i].c);
k = i;
}
//按姓名查找
else if(strcmp(str,stu[i].name) == 0)
{
printf("学生学号\t姓名\t性别\t宿舍号\t电话号\t\t成绩\n");
printf("%s\t\t%s\t%s\t%d\t%s\t%d\t\n",stu[i].num,stu[i].name,
stu[i].gender, stu[i].dormitory_num, stu[i].phone_num, stu[i].c);
k = i;
}
}
if(k==-1)
printf("没有找到符合条件的学生\n");
}
return k;
}
//按学生学号查找
void id_find()
{
char str[15];
printf("请输入要查找的学生学号:");
scanf("%s",str);
display(str);
}
//按学生姓名查找
void name_find()
{
char str[20];
printf("请输入要查找的学生姓名:");
scanf("%s",str);
display(str);
}
//读取本地txt
void load_txt()
{
FILE * fp;
char fname[20];
int i=0, flag;
printf("请输入文件名(如:list.txt):");
scanf("%s",fname);
if((fp=fopen(fname,"r"))==NULL)
{
printf("不能打开文件,文件读取失败!\n");
return;
}
while(1)
{
flag=fscanf(fp, "%s %s %s %d %s %d \n",stu[i].num,
stu[i].name, stu[i].gender, &stu[i].dormitory_num, stu[i].phone_num, &stu[i].c);
if(flag == EOF)
break;
i++;
}
stu_num = i;
printf("从文件中成功读取%d条记录!\n",i);
fclose(fp);
}
//保存的本地txt
void save_txt()
{
FILE * fp;
char fname[20];
int i;
printf("请输入文件名(如:stu.txt):");
scanf("%s",fname);
if((fp=fopen(fname,"w"))==NULL)
{
printf("不能打开文件,文件保存失败!\n");
return;
}
for(i=0; i<stu_num; i++)
fprintf(fp, "%s %s %s %d %s %d \n",stu[i].num,
stu[i].name, stu[i].gender, stu[i].dormitory_num, stu[i].phone_num, stu[i].c);
printf("文件保存成功!\n");
fclose(fp);
}
//降序排序(应用经典冒泡排序)
void sort_jx()
{
int i,j;
struct stu_type temp;
for(i=0; i<stu_num-1; i++)
{
for(j=0; j<stu_num-i-1; j++)
{
if(stu[j].c<stu[j+1].c)
{
temp = stu[j];
stu[j] = stu[j+1];
stu[j+1] = temp;
}
}
}
printf("排序结果如下:\n");
printf("名次\t学生学号 姓名\t\t性别\t宿舍号 \t电话号\t\t成绩\n");
for(i=0; i<stu_num; i++)
{
printf( "%d\t %s\t %s \t %s \t %d \t %s \t %d\n",i+1,stu[i].num,
stu[i].name, stu[i].gender, stu[i].dormitory_num, stu[i].phone_num, stu[i].c);
}
}
//升序排序(应用经典冒泡排序)
void sort_sx()
{
int a,b;
struct stu_type temp_2;
for(a=0; a<stu_num-1; a++)
{
for(b=0; b<stu_num-a-1; b++)
{
if(stu[b].c>stu[b+1].c)
{
temp_2 = stu[b];
stu[b] = stu[b+1];
stu[b+1] = temp_2;
}
}
}
printf("排序结果如下:\n");
printf("名次\t学生学号 姓名\t\t性别\t宿舍号 \t电话号\t\t成绩\n");
for(a=0; a<stu_num; a++)
{
printf( "%d\t %s\t %s \t %s \t %d \t %s \t %d\n",a+1,stu[a].num,
stu[a].name, stu[a].gender, stu[a].dormitory_num, stu[a].phone_num, stu[a].c);
}
}
效果:
1.界面风格
2.读取之前存储在txt里的学生信息并显示(可以添加完保存后再读取)
3.插入信息
4.按学号或者姓名查找:
5.按成绩降序排列
6.按程序升序排列
上一篇: C语言学生管理系统