终于迎来了寒假 ,作为工科生,更甚者是学院里课程最多考试最多的一个专业总算是度过了让人掉头发的考试月,而回到家的我也知道自己的目标所在,所以也是没有丝毫的放松,睡醒的第一天就将自己在考试阶段中所编写的学生信息管理系统做到了完善,现在就将其分享给大家!
以前对于学校不断改善的学生信息管理系统,总是会在选课和考试报名的时候出现卡顿,并且直接瘫痪难以进入感到抱怨,今天自己在进行调试的时候就告诉自己,一定要争取编出来一个较为满意的东西,并且能够更好的将自己所学到的东西做到完善,因为对于链表和动态的一些使用还不是非常的熟练,所以就没有将其运用到这里面,避免产生一些不好的效果,废话不多说,直接给大家开整!
1. 做一个信息管理系统,首要的就是它的界面设计
2. 登陆程序
3. 主菜单界面
4. 功能的实现
整体说来一个完整的教务系统就包括了这几个方面的存在,我们应该尽可能地在自己编写程序之前,在纸上或者说是在画图板上画出来我们所需要的内容和想要实现的一些想法,之后用文字来描述,最终将文字转换为相应的代码即可。
***前面的准备工作,所需要用到的数据进行相应的定义和头文件的使用***
#include
#include
#include
#include
#define N 10//定义数据总数为10,为了测试方便我们可以将其设置为3进行测试
enum Sex//枚举性别的两种可能
{
male,female
};
struct Student{
char name[20];
int num;//100-109
char sex[10];
int Math;//100分制
}stu[N] = { { "王一", 100, "male", 100 },
{"孙二",101,"female",56},
{"张三",102,"male",85} }; //罗列的测试数据,在自己使用的过程中可以将其删除掉 之后在界面之中重新输入
void PrintUi(){//登陆界面函数
printf("\t╔══════════════════════════════════════════════════════════════╗\n");
printf("\t║ ║\n");
printf("\t║ ║\n");
printf("\t║ ._______________________. ║\n");
printf("\t║ | _____________________ | ║\n");
printf("\t║ | I I | ║\n");
printf("\t║ | I 教学管理系统 I | ║\n");
printf("\t║ | I I | ║\n");
printf("\t║ | I___________________I | ║\n");
printf("\t║ !_______________________! ║\n");
printf("\t║ ._[__________]_. ║\n");
printf("\t║ .___|_______________|___. ║\n");
printf("\t║ |::: ____ | ║\n");
printf("\t║ | 密码: | ║\n");
printf("\t║ !_____________________! ║\n");
printf("\t║ ║\n");
printf("\t║ ║\n");
printf("\t║ ║\n");
printf("\t║ ║\n");
printf("\t╚══════════════════════════════════════════════════════════════╝\n");
}
这个登陆界面其实是我在编写的过程中突然想到的,记得自己以前编辑过一个专门的登陆函数,所以就将其引用到了这里,将完整的一个登陆函数链接附在后面
int Land(){//登陆函数
printf("请输入您的登陆密码:");
int Psssword;//初始化密码数据
int a = 7777777;//设置的密码
for (int n = 1; n <= 3; n++){
scanf("%d", &Psssword);
if (Psssword==a){
system("cls");
printf("您的密码输入正确!\n");
printf("正在登陆,请稍等…………\n");
Sleep(4000);//登陆延时程序,产生短暂的登陆状态
system("cls");
return 1;//登陆成功则返回1
}
else{
printf("您的密码输入错误,请您重新输入!\n",n);
}
if (n == 3){//登陆次数为3时 机会用尽
printf("您的机会已用尽!\n");
return -1;//机会用尽表示登陆失败,则返回-1
}
}
return 0;
}
void PrintMode(){//系统菜单页面
printf("**************************************\n");
printf("**************************************\n");
printf("****** ********\n");
printf("****** 教 学 系 统 ********\n");
printf("****** ********\n");
printf("****** ********\n");
printf("****** 1. 录 入 信 息 ********\n");
printf("****** 2. 输 出 信 息 ********\n");
printf("****** 3. 查 询 信 息 ********\n");
printf("****** 4. 成 绩 排 名 ********\n");
printf("****** 0. 退 出 系 统 ********\n");
printf("****** ********\n");
printf("****** ********\n");
printf("**************************************\n");
printf("**************************************\n");
}
int Welcome()
{//欢迎函数
PrintUi(1);//打印主界面函数
int i = Land(1);//登陆界面的调用
if (i == 1){//当登陆成功则打开菜单页面
PrintMode(1);//打印菜单界面
return 0;
}
else
{
return -1;
}
}
int Search(int i)//查询函数,为了后面输出特定的信息而进行学号的查找
{
int n;
for (n = 0; n < N; n++){
if (i == stu[n].num){//如果所输入的学号和系统内的学号相等,则返回此位的序号
return n;
}
}
return -1;//如果未找到,则返回-1
}
void InPut()
{//输入函数
int i;
printf("提示:姓名 学号(100-109) 性别(male,female) 数学成绩(100分制)\n");
printf("请输入全部的学生信息:\n");
for (i = 0; i < N; i++){
scanf("%s%d%s%f", stu[i].name, &stu[i].num, stu[i].sex, &stu[i].Math);
}
}
void SpecialPut(){
int i,c;
printf("请输入您要查找的学号(100-109):");
while (1){
scanf("%d", &i);
c = Search(i);//调用查找函数来进行学号的查找
if ( c== -1){//若不属于系统中的学号,则返回-1,表示输入有误
printf("您的输入有误!\n");
continue;
}
printf("姓名:%s\n学号:%d\n性别:%s\n数学:%d\n",stu[c].name, stu[c].num, stu[c].sex, stu[c].Math);
break;
}
}
void OutPut(){
int i;
printf("----------------------------------------------\n");
printf("|姓名: |学号: |性别: |数学: |\n");
for (i = 0; i < N; i++){
printf("|%s |%d |%s |%d |\n", stu[i].name, stu[i].num, stu[i].sex,stu[i].Math);
}
printf("----------------------------------------------\n");
}
void Rand(){//在排序的这个函数之中,我们也可以增添英语和语文成绩,其方式是一样的
int i, j, num,math;//设置转换的中介量
char name[20],sex[10];
for (i = 0; i < N - 1; i++){
for (j = i+1; j < N; j++){
if (stu[j].Math>stu[i].Math){//以冒泡法来进行排序
math = stu[j].Math;//将数学成绩进行调换
stu[j].Math = stu[i].Math;
stu[i].Math = math;
strcpy(name, stu[j].name);//对于字符串不能够进行直接转换,因为指针所指向的只是字符串的首地址
strcpy(stu[j].name, stu[i].name);//因此使用strcpy函数来进行字符串的复制
strcpy(stu[i].name, name);
num = stu[j].num;//和成绩类似
stu[j].num = stu[i].num;
stu[i].num = num;
strcpy(sex , stu[j].sex);//性别和名字类似
strcpy(stu[j].sex, stu[i].sex);
strcpy(stu[i].sex, sex);
}
}
}
printf("成绩的排名为:\n");
OutPut();
}
int main(){
int c = Welcome(1);
if (c == 0)
{
int choice;
printf("请输入您要进行的操作序号:");
scanf("%d", &choice);
switch (choice){
case 1: InPut();//信息输入
break;
case 2: OutPut();//信息全部输入
break;
case 3: SpecialPut();//按学号查找并输出此学生的信息
break;
case 4: Rand();//科目成绩排名
break;
case 0://退出系统
system("cls");
printf("您选择退出系统!");
break;
}
}
system("pause");
return 0;
}
模拟登陆函数的GitHub链接
信息管理系统的GitHub链接