C语言学生管理系统(增进版)

在原版上进行改进,主要改进的功能有。

1.利用atof:将字符串转换为浮点型;

利用atoi:将字符串转换为整型;

原文地址:http://www.cnblogs.com/sddai/p/5774121.html

3.将结构体改变了,可能因为编码原因,只能char型输入,还好有ASCII码

4.将输出格式改变

C语言学生管理系统(增进版)

 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <windows.h> #pragma warning(disable : 4996)
#pragma warning(disable : 4477) FILE *fp; int count; char biubiubiu = '\n'; struct add
{
char ch[];
char a[];
char SID[];
char ch1[];
char b[];
char Name[];
char ch2[];
char c[];
char Age[];
char ch3[];
char d[];
char Gender[];
char ch4[];
char e[];
char EntranxeScore[];
char ch5[];
}add1[], student, *pointer; void color(const unsigned short color1)
{
if (color1 >= && color1 <= )
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color1);
else
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), );
} void printinfor();//菜单函数 void wuyu_1();//按学号排序函数
void wuyu_2();//按总成绩排序函数 void function_1();//添加学生信息函数
void function_2();//删除学生信息函数
void function_3();//更改学生信息函数
void function_4();//查询学生信息函数
void function_5();//显示所有学生信息函数
void function_6();//附加功能选项函数 void findfunction_1();//通过学号查询函数
void findfunction_2();//通过学生姓名查询函数
void findfunction_3();//通过学生年龄查询函数
void findfunction_4();//通过学生分数查询函数 void add_txt(); int main(void)
{
int num_1, k;
fp = fopen("D:\\studyinfor.txt", "ab+");//打开文本/创建,进行操作
fread(add1, sizeof(struct add), , fp);//读取文本储存信息
add_txt();
for (k = ; k<; k++)//判断文本中储存人数(Age==0表示此处无数据)
{
if (add1[k].Age[] == '\0')
{
break;
}
count++;
}
fclose(fp);//关闭指针
printinfor();//显示菜单
while ()//使用者操作
{
do
{
printf("请输入要进行操作的序列号:");
scanf("%d", &num_1);
} while (num_1< || num_1>);
if (num_1 == )break; switch (num_1)
{
case :function_1(); break;
case :function_2(); break;
case :function_3(); break;
case :function_4(); break;
case :function_5(); break;
case :function_6(); break;
}
system("cls");
printinfor();
}
return ;
} void checkSID(int j)//检查学号大小函数
{
int num_int;
num_int = atoi(add1[j].SID);
while (num_int <= || num_int>)
{
color();
printf("warning:SID的取值范围在0~750,请重新输入.\n");
color();
printf("请输入学生的学号:");
scanf("%s", &add1[j].SID);
num_int = atoi(add1[j].SID);
if (num_int> && num_int <= )
{
break;
}
}
} void checkSID_1(int m)//检查学号是否重复函数
{
int k, num_int, num1_int;
num1_int = atoi(add1[m].SID);
for (k = ; k < count; k++)
{
if (k == m)
{
continue;
}
num_int = atoi(add1[k].SID);
while (num_int == num1_int)
{
color();
printf("学号重复,请重新输入.\n");
color();
printf("请输入学号:");
scanf("%s", &add1[m].SID);
num1_int = atoi(add1[m].SID);
k == ;
}
}
}
//因为选择输入的方式是ab+,从新从i=0开始输入进去,所以想要通过 void checkName(int m, char Name[])//检查姓名函数
{
while (strlen(Name)>)
{
color();
printf("warning:Name的字数最多为5,请重新输入.\n");
color();
printf("请输入学生的姓名:");
scanf("%s", &add1[m].Name);
}
} void checkGender(int i, char a[])//检查性别函数
{
while (strcmp(a, "男") && strcmp(a, "女"))
{
color();
printf("warning:Gender只能是男或女,请重新输入.\n");
color();
printf("请输入学生的性别:");
scanf("%s", &add1[i].Gender);
}
} void checkAge(int m)//检查年龄函数
{
int num_int;
num_int = atoi(add1[m].Age);
while (num_int< || num_int>)
{
color();
printf("warning:Age的取值范围在0~122,请重新输入,严肃对待!\n");
color();
printf("请输入学生的年龄:");
scanf("%s", &add1[m].Age);
num_int = atoi(add1[m].Age);
}
} void checkEntranxeScore(int k)
{
double num_double;
num_double = atof(add1[k].EntranxeScore);
while (num_double< || num_double>)
{
color();
printf("warning:EntranxeScore的取值范围在0~750,请重新输入.\n");
color();
printf("请输入学生的分数:");
scanf("%lf", &add1[k].EntranxeScore);
}
} void getName(char name[]) {
while () {
printf("请输入学生的姓名:");
fflush(stdin);
scanf("%s", name);
if (strlen(name)<) {
break;
}
}
} void printinfor()
{
system("date /t");
system("TIME /t\n");
printf(" **********欢迎使用学生信息管理系统(当前有%d人)********\n", count);
printf(" *\t\t(1)添加学生信息\t\t\t\t*\n");
printf(" *\t\t(2)删除学生信息\t\t\t\t*\n");
printf(" *\t\t(3)更改学生信息\t\t\t\t*\n");
printf(" *\t\t(4)查询学生信息\t\t\t\t*\n");
printf(" *\t\t(5)显示所有学生信息\t\t\t*\n");
printf(" *\t\t(6)附加功能选项\t\t\t\t*\n");
printf(" *\t\t(0)退出学生系统\t\t\t\t*\n");
printf(" *\t\t\t\t\t 作者:liu\t*\n");
printf(" *****************************************************\n");
} void findfunction()
{
system("cls");
system("date /t");
system("TIME /t\n");
printf(" ***************查询学生信息(当前有%d人)*****************\n", count);
printf(" *\t\t(1)通过学生学号查询 \t\t\t*\n");
printf("\n");
printf(" *\t\t(2)通过学生姓名查询 \t\t\t*\n");
printf("\n");
printf(" *\t\t(3)通过学生年龄查询 \t\t\t*\n");
printf("\n");
printf(" *\t\t(4)通过学生分数查询 \t\t\t*\n");
printf(" *********************************************************\n");
} void Morefunction()
{
system("cls");
printf(" *******************附加功能*****************\n");
printf("\t\t\t*\t\t\t\t\t *\n");
printf(" *\t\t(1)按学号进行整理 \t *\n");
printf("\t\t\t*\t\t\t\t\t *\n");
printf(" *\t\t(2)按总分进行整理 \t *\n");
printf("\t\t\t*\t\t\t\t\t *\n");
color();
printf("\t\t\t*待开发... ... *\n");
color();
printf("\t\t\t********************************************\n");
} void inputmomo(int i)
{
printf("请输入学生的学号:");
scanf("%s", &add1[i].SID);
checkSID(i);
checkSID_1(i);
color();
printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
color();
printf("请输入学生的名字:");
scanf("%s", &add1[i].Name);
checkName(i, add1[i].Name);
color();
printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
color();
printf("请输入学生的年龄:");
scanf("%s", &add1[i].Age);
checkAge(i);
color();
printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
color();
printf("请输入学生的性别:");
scanf("%s", &add1[i].Gender);
checkGender(i, add1[i].Gender);
color();
printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
color();
printf("请输入学生的总成绩:");
scanf("%s", &add1[i].EntranxeScore);
color();
printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
color();
} void function_1()//添加学生信息函数
{
int n, i, m = count;
if ((fp = fopen("D:\\studyinfor.txt", "ab+")) == NULL)//检测文本是否正常打开
{
color();
printf("Can't open the file!");
color();
system("pause");
exit();
}
printf("请输入您要添加的学生信息人数:");
scanf("%d", &n); for (i = count; i<n + m; i++)
{
printf("请输入No.%d的信息.\n", i + );
inputmomo(i - m);//录入学生信息
count++;
}
fwrite(add1, sizeof(struct add), n, fp);
rewind(fp);
color();
printf("添加中");
Sleep();
printf(".");
Sleep();
printf(".");
Sleep();
printf(". ");
Sleep();
printf(".");
Sleep();
printf(".");
Sleep();
printf(".\n");
color();
printf("添加成功!\n");
printf("学生信息目录已更新.\n");
fread(add1, sizeof(struct add), count, fp);//读取学生信息
color();
printf("___________________________________________________\n");
printf("| 学号 | 姓名 | 年龄 | 性别 | 总分成绩 |\n");
for (i = ; i<count; i++)//打印更新的学生信息
{
if (add1[i].SID>)
printf(" %-3s %-3s %-6s %-3s \t %-6s \n", add1[i].SID, add1[i].Name, add1[i].Age, add1[i].Gender, add1[i].EntranxeScore);
}
printf("|-------------------------------------------------|\n");
fclose(fp);
printf("按任意键返回主菜单... ....\n");
system("pause");
} void function_2()//删除学生信息
{
int m, k, i, j = , num_int;
if ((fp = fopen("D:\\studyinfor.txt", "wb+")) == NULL)
{
printf("Can't open the file!\n");
system("pause");
exit();
}
if (count == )
{
color();
printf("The file is NULL!!!\n");
color();
return;
}
printf("请输入你要删除的学生的学号:");
scanf("%d", &m);
fread(add1, sizeof(struct add), count, fp);
for (k = ; k<count; k++)
{
num_int = atoi(add1[k].SID);
if (num_int == m)
{
printf("_____________________________________________________\n");
printf("| 学号 | 姓名 | 年龄 | 性别 | 总分成绩 |\n");
printf(" %.2d %-6s %-3d %-3s \t%5.2lf \n", add1[k].SID, add1[k].Name, add1[k].Age, add1[k].Gender, add1[k].EntranxeScore);
printf("|---------------------------------------------------|\n");
for (i = k; i<count - ; i++)//将要删除的数后面的函数往前进一格,占去要删除的部分
{
strcpy(add1[i].SID, add1[i + ].SID);
strcpy(add1[i].Name, add1[i + ].Name);
strcpy(add1[i].Age, add1[i + ].Age);
strcpy(add1[i].Gender, add1[i + ].Gender);
strcpy(add1[i].EntranxeScore, add1[i + ].EntranxeScore);
}
count--;
fwrite(add1, sizeof(struct add), count, fp);
rewind(fp);//使指针回到开头
fclose(fp);
color();
printf("删除中");
Sleep();
printf(".");
Sleep();
printf(".");
Sleep();
printf(". ");
Sleep();
printf(".");
Sleep();
printf(".");
Sleep();
printf(".\n");
Sleep();
color();
printf("删除成功!按任意键继续... ...\n");
color();
j++;
}
}
if (j == )
{
color();
printf("查无此人!\n");
color();
}
system("pause");
} void function_3()//更改学生信息
{
int m, k, j = , num_int;
if ((fp = fopen("D:\\studyinfor.txt", "rb+")) == NULL)
{
printf("Can't open the file!\n");
system("PAUSE");
exit();
}
if (count == )
{
color();
printf("The file is NULL!!!\n");
color();
return;
}
printf("请输入你要更改的学生的学号:");
scanf("%d", &m);
fread(add1, sizeof(struct add), count, fp);
for (k = ; k<count; k++)
{
num_int = atoi(add1[k].SID);
if (num_int == m)
{
printf("_____________________________________________________\n");
printf("| 学号 | 姓名 | 年龄 | 性别 | 总分成绩 |\n");
printf(" %-6s %-6s %-3s %-3s \t %-6s \n", add1[k].SID, add1[k].Name, add1[k].Age, add1[k].Gender, add1[k].EntranxeScore);
printf("|---------------------------------------------------|\n");
printf("请输入你要修改的内容:\n");
inputmomo(k);
rewind(fp);
fwrite(add1, sizeof(struct add), count, fp);
//rewind(fp);
fclose(fp);
color();
printf("更改成功!按任意键继续... ...\n");
color();
j++;
}
}
if (j == )
{
color();
printf("查无此人!\n");
color();
}
system("pause");
} void function_4()//查询学生信息
{
int m;
findfunction();//进入查询菜单
printf("请输入你查询的方式序列号:");
scanf("%d", &m);
do {
switch (m)
{
case :findfunction_1(); break;
case :findfunction_2(); break;
case :findfunction_3(); break;
case :findfunction_4(); break;
}
} while (m< || m>);
} void function_5()//显示所有学生信息
{
int i;
if ((fp = fopen("D:\\studyinfor.txt", "rb")) == NULL)
{
printf("Can't open the file!\n");
system("PAUSE");
exit();
}
fread(add1, sizeof(struct add), count, fp);
if (count == )
{
color();
printf("The file is NULL!\n");
color();
system("pause");
return;
}
else {
printf("_____________________________________________________\n");
printf("| 学号 | 姓名 | 年龄 | 性别 | 总分成绩 |\n");
for (i = ; i<count; i++)
{
if (add1[i].SID != '\0')
printf(" %-3s %-6s %-3s %-3s \t %-6s \n", add1[i].SID, add1[i].Name, add1[i].Age, add1[i].Gender, add1[i].EntranxeScore);
}
printf("|---------------------------------------------------|\n");
}
fclose(fp);
printf("按任意键返回主菜单... ...\n");
system("pause");
} void function_6()//附加功能选项
{
Morefunction();//附加功能
int k;
do {
printf("请输入你要操作的序号:");
scanf("%d", &k);
switch (k)
{
case :wuyu_1(); break;
case :wuyu_2(); break;
default:
{
color();
printf("输入有误,请重新输入!\n");
color();
}
}
} while (k < || k>);
} void findfunction_1()//学生学号查询
{
int m, n, i, j = , num_int;
printf("请输入你要搜索的学生学号范围:\n");
printf("最小值:");
scanf("%d", &m);
printf("最大值:");
scanf("%d", &n);
fp = fopen("D:\\studyinfor.txt", "rb+");
fread(add1, sizeof(struct add), count, fp);
printf("_____________________________________________________\n");
printf("| 学号 | 姓名 | 年龄 | 性别 | 总分成绩 |\n");
for (i = ; i<count; i++)
{
num_int = atoi(add1[i].SID);
if (num_int >= m && num_int <= n)
{
printf(" %-3s %-6s %-3s %-3s \t %-3s \n", add1[i].SID, add1[i].Name, add1[i].Age, add1[i].Gender, add1[i].EntranxeScore);
printf("|---------------------------------------------------|\n");
j++;
}
}
if (j == )
{
printf("无相关学生信息.\n");
}
printf("按任意键返回主菜单... ...\n");
system("pause");
} void findfunction_2()//学生姓名查询
{
int i, n = ;
char name[];
getName(name);//输入学生姓名
rewind(fp);
fp = fopen("D:\\studyinfor.txt", "rb+");
fread(add1, sizeof(struct add), count, fp);
for (i = ; i<count; i++)
{
if (strcmp(add1[i].Name, name) == ) {
printf("_____________________________________________________\n");
printf("| 学号 | 姓名 | 年龄 | 性别 | 总分成绩 |\n");
printf(" %-3s %-6s %-3s %-3s \t %-6s \n", add1[i].SID, add1[i].Name, add1[i].Age, add1[i].Gender, add1[i].EntranxeScore);
printf("|---------------------------------------------------|\n");
++n;
break;
}
}
if (n == )
{
color();
printf("无相关学生信息!\n");
color();
}
printf("按任意键返回主菜单... ...\n");
system("pause");
} void findfunction_3()//学生年龄查询
{
int m, n, i, j = , num_int;
printf("请输入你要查询的学生年龄范围:\n");
printf("最小值:");
scanf("%d", &m);
printf("最大值:");
scanf("%d", &n);
fp = fopen("D:\\studyinfor.txt", "rb+");
fread(add1, sizeof(struct add), count, fp);
printf("_____________________________________________________\n");
printf("| 学号 | 姓名 | 年龄 | 性别 | 总分成绩 |\n");
for (i = ; i<count; i++)
{
num_int = atoi(add1[i].Age);
if (num_int >= m && num_int <= n)
{
printf(" %-3s %-6s %-3s %-3s \t %-6s \n", add1[i - ].SID, add1[i - ].Name, add1[i - ].Age, add1[i - ].Gender, add1[i - ].EntranxeScore);
printf("|---------------------------------------------------|\n");
j++;
}
}
if (j == )
{
printf("无相关学生信息!\n");
}
printf("按任意键返回主菜单... ...\n");
system("pause");
} void findfunction_4()//学生分数查询
{
int m, n, i, j = ;
double num_double;
printf("请输入你要查询的学生总成绩范围:\n");
printf("最小值:");
scanf("%d", &m);
printf("最大值:");
scanf("%d", &n);
fp = fopen("D:\\studyinfor.txt", "rb+");
fread(add1, sizeof(struct add), count, fp);
printf("_____________________________________________________\n");
printf("| 学号 | 姓名 | 年龄 | 性别 | 总分成绩 |\n");
for (i = ; i<count; i++)
{
num_double = atof(add1[i].EntranxeScore);
if (num_double >= m && num_double <= n)
{
printf(" %-3s %-6s %-3s %-3s \t %-6s \n", add1[i].SID, add1[i].Name, add1[i].Age, add1[i].Gender, add1[i].EntranxeScore);
printf("|---------------------------------------------------|\n");
j++;
}
}
if (j == )
{
printf("无相关学生信息!\n");
}
printf("按任意键返回主菜单... ...\n");
system("pause");
} void ExchangeFunction(int m, int n)//交换数据结构中两个统一结构的不同下标的结构值
{
double max = ;
int max_1 = ;
strcpy(student.EntranxeScore, add1[m].EntranxeScore);
strcpy(add1[m].EntranxeScore, add1[n].EntranxeScore);
strcpy(add1[n].EntranxeScore, student.EntranxeScore);
strcpy(student.Age, add1[m].Age);
strcpy(add1[m].Age, add1[n].Age);
strcpy(add1[n].Age, student.Age);
strcpy(student.SID, add1[m].SID);
strcpy(add1[m].SID, add1[n].SID);
strcpy(add1[n].SID, student.SID);
strcpy(student.Gender, add1[m].Gender);
strcpy(add1[m].Gender, add1[n].Gender);
strcpy(add1[n].Gender, student.Gender);
strcpy(student.Name, add1[m].Name);
strcpy(add1[m].Name, add1[n].Name);
strcpy(add1[n].Name, student.Name);
} void wuyu_1()//按学号查询
{
if ((fp = fopen("D:\\studyinfor.txt", "rb+")) == NULL)
{
printf("Can't open the file!\n");
system("PAUSE");
exit();
}
int m, n, j, num_int, num1_int;
for (m = ; m < count - ; m++)//比较学号大小
{
for (n = m + ; n < count; n++)
{
num_int = atoi(add1[n].SID);
num1_int = atoi(add1[m].SID);
if (num_int < num1_int)
{
ExchangeFunction(m, n);//交换一个结构体整体值
}
}
}
color();
printf("排序中");
Sleep();
printf("(");
Sleep();
printf(";");
Sleep();
printf("—");
Sleep();
printf("_");
Sleep();
printf("—");
Sleep();
printf(")\n");
Sleep();
color();
printf("排序成功!按任意键继续... ...\n");
color();
printf("_____________________________________________________\n");
printf("| 学号 | 姓名 | 年龄 | 性别 | 总分成绩 |\n");
for (j = ; j<count; j++)
{
printf(" %-3s %-6s %-3s %-3s \t %-6s \n", add1[j].SID, add1[j].Name, add1[j].Age, add1[j].Gender, add1[j].EntranxeScore);
printf("|---------------------------------------------------|\n");
}
rewind(fp);
fwrite(add1, sizeof(struct add), count, fp);
fclose(fp);
system("pause");
} void wuyu_2()//按总分排序
{
if ((fp = fopen("D:\\studyinfor.txt", "rb+")) == NULL)
{
printf("Can't open the file!\n");
system("PAUSE");
exit();
}
int m, n, j;
double num_double, num1_double;
for (m = ; m < count - ; m++)//比较总分大小
{
for (n = m + ; n < count; n++)
{
num_double = atof(add1[n].EntranxeScore);
num1_double = atof(add1[m].EntranxeScore);
if (num_double > num1_double)
{
ExchangeFunction(m, n);//交换两个结构体整体值
}
}
}
color();
printf("排序中");
Sleep();
printf("(");
Sleep();
printf("*");
Sleep();
printf("— ");
Sleep();
printf("з");
Sleep();
printf("—");
Sleep();
printf(")\n");
Sleep();
color();
printf("排序成功!按任意键继续... ...\n");
color();
printf("_____________________________________________________\n");
printf("| 学号 | 姓名 | 年龄 | 性别 | 总分成绩 |\n");
for (j = ; j<count; j++)
{
printf(" %-3s %-6s %-3s %-3s \t %-6s \n", add1[j].SID, add1[j].Name, add1[j].Age, add1[j].Gender, add1[j].EntranxeScore);
printf("|---------------------------------------------------|\n");
}
rewind(fp);
fwrite(add1, sizeof(struct add), count, fp);
fclose(fp);
system("pause");
} void add_txt()
{
int i;
for (i = ; i<; i++)
{
strcpy(add1[i].ch, "\r\n");
strcpy(add1[i].ch1, "\r\n");
strcpy(add1[i].ch2, "\r\n");
strcpy(add1[i].ch3, "\r\n");
strcpy(add1[i].ch4, "\r\n");
strcpy(add1[i].ch5, "\r\n");
strcpy(add1[i].a, "SID:");
strcpy(add1[i].b, "Name:");
strcpy(add1[i].c, "Age:");
strcpy(add1[i].d, "Gender:");
strcpy(add1[i].e, "EntranxeScore:");
}
}
上一篇:happens-before规则


下一篇:LSI IBM服务器阵列卡操作经历