当前位置: 首页 > news >正文

网站导航的分类有哪些/茂名网络推广

网站导航的分类有哪些,茂名网络推广,线上设计师网站,北京网站建设公司分形、 目录 搭建offer.h文件 搭建offer.c中的main函数 密码登入系统 搭建my_oferr.c中的接口函数 使用帮助菜单接口函数 增加学生信息接口函数 查询学生信息接口函数 删除学生信息接口函数 保存学生信息接口 打开文件fopen 关闭文件fclose 判断是否保存文件fwrite 退出执行文件…

目录

搭建offer.h文件

搭建offer.c中的main函数

密码登入系统

搭建my_oferr.c中的接口函数 

使用帮助菜单接口函数

增加学生信息接口函数 

查询学生信息接口函数

删除学生信息接口函数 

保存学生信息接口 

打开文件fopen

关闭文件fclose

 判断是否保存文件fwrite

退出执行文件exit

显示学生信息接口函数

 修改学生信息接口函数

 学生排名信息接口函数

--------------------------------------

---------------- 

每次归程,都是为了更好出发;

每次停歇,都是为了积攒力量 。

最近大家C语言是不是都进入了实训阶段呢?

还在为写不出代码而苦恼吗?

接下来我将带领大家一起完成!

C语言的一个简单项目-学生管理系统!

主要运用了数组和指针函数

关于链表的搭建后续会更新

题目:学生管理系统
学生数据由学号、姓名、性别、年龄、三门课(C语言、高数、大物)的成绩构成

 实现功能包括:
(1)密码登入
(2)使用提示
(3)信息录入
(4)查询信息
(5)删除信息
(6)保存信息
(7)显示信息

(8)修改信息

(9)成绩排名

对于这种代码量超百位数的,大家最好养成分模块写代码的习惯:

我创建了一个.h文件和两个.c 文件,.h一般放头文件和结构体类型.c文件一个设置主函数main一个完善相应的函数接口。这样分工明确,不会混乱,可以提高敲代码的效率哦~

首先明白我们要实现的项目功能:密码登入系统、使用帮助菜单、增加学生信息、查询学生信息、删除学生信息、保存当前信息、显示当前信息、修改学生信息、学生成绩排名


搭建offer.h文件

因为学生有以下几个基本信息:姓名、年龄、学号、性别,依次由name、age、id和sex来表示,所以可以通过结构体实现,struct语句定义存储不同类型的数据项,定义一个结构体数组Stu,用于存储每个学生的信息

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void TiShi();      //提示功能
void StuXinXi();   //增加信息
void ChaZhao();    //查找信息
void ShanGai();    //删改信息
void BaoCun();     //保存信息
void XianShi();    //显示信息
void XiuGai();     //修改信息
void PaiMing();    //学生排名
#define N 20
#define Number sizeof(struct Student)//求结构体的大小    
//创建结构体包含学生信息
struct Student
{char Stuid[N];     //学号char Stuname[N];   //名字int Stuage;        //年龄char Stusex[N];    //性别double score[3];   //成绩
}Stu[Number];
//枚举体美化选项
enum menu2
{Quit = 0,Resume = 1
};
enum ChaZhao
{CaoZuo1 = 1,CaoZuo2 = 2,CaoZuo3 = 3
};

1.这里最好定义一个宏#define不然以后修改将会很麻烦

2.枚举体美化选项在我之前的博客讲过,提高代码的可读性

3.剩下的就是头文件的引入和函数的声明以及结构体的创建

搭建offer.c中的main函数

 要使用我们在offer.h中设置的头文件要在offer.c中加上#include"offer.h"

#include"offer.h"

 整体的框架如下:

#include"offer.h"
int sum = 1;
int main()
{int i = 0;int input = 0, count = 0;char mima[20] = "123";//登入的密码char shuru[20];system("color F4");printf("\t\t\t     **************************************\n");printf("\t\t\t     |       *欢迎使用学生管理系统*       |\n");printf("\t\t\t     |           *管理员: 小唐*           |\n");printf("\t\t\t      ------------------------------------\n");printf("请输入管理员密码:\n");while ((count = _getch()) != '\r')   {if (count == '\b'){i--;printf("\b \b");}else{shuru[i++] = count;printf("*");}}shuru[i++] = '\0';    //getch赋值的是单个字符,所以为了比较两个字符串的大小要给shuru数组后面添加'\0'if (strcmp(mima, shuru) == 0){printf("\n密码正确,您已进入系统!\n");}else{printf("\n密码错误,请重新输入!\n");return 0;}system("pause");system("cls");do{menu2();printf("请选择继续还是结束操作:\n");scanf("%d", &sum);switch (sum){case Quit:system("cls");//清除屏幕printf("您已退出学生管理系统!\n");break;case Resume:menu1();void(*p[9])() = { NULL,TiShi,StuXinXi,ChaZhao,ShanGai,BaoCun,XianShi,XiuGai,PaiMing };//指针数组函数printf("请输入你要进行的操作\n");scanf("%d", &input);system("cls");(*p[input])();break;default:printf("输入错误,重新输入!\n");break;}} while (sum);return 0;
}

接下来我将带领大家解读以上代码

密码登入系统

在进入学生管理系统之前,我设置了一个小型的系统密码登入界面来判断是进入还是退出

	int count = 0;char mima[20] = "123";//登入的密码char shuru[20];system("color F4");printf("\t\t\t     **************************************\n");printf("\t\t\t     |       *欢迎使用学生管理系统*       |\n");printf("\t\t\t     |           *管理员: 小唐*           |\n");printf("\t\t\t      ------------------------------------\n");printf("请输入管理员密码:\n");while ((count = _getch()) != '\r')   {if (count == '\b'){i--;printf("\b \b");}else{shuru[i++] = count;printf("*");}}shuru[i++] = '\0';    //getch赋值的是单个字符,所以为了比较两个字符串的大小要给shuru数组后面添加'\0'if (strcmp(mima, shuru) == 0){printf("\n密码正确,您已进入系统!\n");}else{printf("\n密码错误,请重新输入!\n");return 0;}

1.我们这里利用了while去进行getch输入getch输入单个字符是不会显示信息的,但我们按下回车键输入结束,循环停止

2.' \r '就是回车键的意思,而' \b '就是删除键的意思

3.每循环一次就输入一个字符count赋值给数组shuru,并打印" * "

4.getch赋值的是单个字符,所以为了比较两个字符串的大小要给shuru数组后面添加' \0 '

5.strcmp是比较两个字符串的大小,详细可以看我之前的博客

以上就是我们密码登入系统的全部内容

接下来我将讲解接下来的代码实现

 menu2()的作用就是选择继续操作还是退出系统

void menu2()
{system("color F4");printf("\t\t\t*********************\n");printf("\t\t\t*********************\n");printf("\t\t\t-------1.Resume------\n");printf("\t\t\t-------0.Quit--------\n");printf("\t\t\t*********************\n");
}

1.system("cls")-清屏函数,会将显示过的内容清空,被#include<stdlib.h>包含

2.system("color F4");是改变背景颜色的函数,被#include<stdlib>包含

3.我们用枚举类型美化选项Quit就是0,Resume就是1

4.我们采用了指针数组函数可以直接调用接口函数,因为没有返回值函数类型就是void,这样减少了重复代码的编写,如果大家不适应也可以用switch


搭建my_oferr.c中的接口函数 

首先定义我们my_oferr.c中的全局变量

#include"offer.h"
int m = 0;              //记录录入学生的人数

由于是显示一个管理系统

所以我们设计一个主菜单

通过定义一个函数menu1()来实现这个功能:

void menu1()
{printf("\n");system("color F4");printf("\t\t\t*****************************************************\n");printf("\t\t\t*---------------------------------------------------*\n");printf("\t\t\t*                   学生管理系统                    *\n");printf("\t\t\t*****************************************************\n");printf("\t\t\t********************系统功能菜单*********************\n");printf("\t\t\t----------------------     --------------------------\n");printf("\t\t\t*****************************************************\n");printf("\t\t\t**    1、使用帮助菜单   *     2、增加学生信息      **\n");printf("\t\t\t*****************************************************\n");printf("\t\t\t**    3、查询学生信息   *     4、删除学生信息      **\n");printf("\t\t\t*****************************************************\n");printf("\t\t\t**    5、保存当前信息   *     6、显示当前信息      **\n");printf("\t\t\t*****************************************************\n");printf("\t\t\t**    7、修改学生信息   *     8、学生成绩排名      **\n");printf("\t\t\t*****************************************************\n");printf("\t\t\t*****************************************************\n");printf("\t\t\t----------------------     --------------------------\n");
}

这个大家可以自己随喜好设置~ 


 使用帮助菜单接口函数

void TiShi()
{printf("欢迎来到学生管理系统:\n");printf("在这个管理系统中,教师和学生都不需要去了解自己的信息,只需通过网络就能实现自己的信息管理。\n");printf("教师可以轻松便捷地掌握学生相关情况、姓名、学号以及考试成绩等基本信息。\n");printf("它还提供一个搜索功能和设置权限,可以将学生的信息进行搜索,\n也可根据关键字或其他方式对其进行定位,并且还能显示出该人的相关基本资料。\n");printf("如果由技术上的缺陷还请联系项目负责人:\n17817473648\n");system("pause");system("cls");
}

 system("pause")是暂停函数,按任意键重新启动,被#include<stdlib.h>包含

本函数接口主要起到提示作用,小伙伴们可以自行添加自己的管理需求 


 增加学生信息接口函数 

void StuXinXi()
{int i = m,flag,n = 0;printf("请输入你要添加的学生人数:\n");scanf("%d", &n);printf("--------------------------*学生信息录入系统*--------------------------------\n");if (n > 0){do {flag = 1;while (flag){flag = 0;printf("请输入第%d位学生的学号:\n", i + 1);scanf("%s", Stu[i].Stuid);for (int j = 0; j < i; j++){if (strcmp(Stu[i].Stuid, Stu[j].Stuid) == 0)//判断是否重复{printf("该学生已经录入,请重新选择!\n");flag = 1;break;}}}printf("请输入第%d学生的姓名:\n", i + 1);scanf("%s", Stu[i].Stuname);printf("请输入第%d学生的年龄:\n", i + 1);scanf("%d", &Stu[i].Stuage);printf("请输入第%d学生的性别:\n", i + 1);scanf("%s", &Stu[i].Stusex);printf("请输入第%d学生的C语言成绩:\n", i + 1);scanf("%lf", &Stu[i].score[0]);printf("请输入第%d学生的高数成绩:\n", i + 1);scanf("%lf", &Stu[i].score[1]);printf("请输入第%d学生的大物成绩:\n", i + 1);scanf("%lf", &Stu[i].score[2]);i++;} while (i < n + m);m += n;if (flag == 0){printf("添加完成!请进行下一步操作:\n");}system("pause");system("cls");}
}

1.flag用来判断最后输出的提示语句,提示录入成功与否

2.然后就是whie循环给结构体成员赋初值

3.在将人数累加给全局变量m就好了


查询学生信息接口函数

void ChaZhao()
{int flag, input;char Stu1[Number];printf("\t\t\t----------*学生信息查找系统*----------\n");printf("\t\t\t**************************************\n");printf("\t\t\t******1.请输入你要查找的学生名字******\n");printf("\t\t\t******2.请输入你要查找的学生学号******\n");printf("\t\t\t******------3.退出本次操作------******\n");printf("\t\t\t**************************************\n");while (1){flag = 0;printf("请输入你要进行的查询操作:\n");scanf("%d", &input);switch (input){case CaoZuo1:printf("请输入你要查找的学生名字:\n");scanf("%s", Stu1);for (int i = 0; i < m; i++){if (strcmp(Stu[i].Stuname, Stu1) == 0){flag = 1;printf("学号:\t\t名字:\t年龄:\t性别:\tC语言成绩:\t高数成绩:\t大物成绩:\n");printf("%s\t%s\t%d\t%s\t%.2lf\t\t%.2lf\t\t%.2lf\n", Stu[i].Stuid, Stu[i].Stuname, Stu[i].Stuage, Stu[i].Stusex, Stu[i].score[0], Stu[i].score[1], Stu[i].score[2]);}}break;case CaoZuo2:printf("请输入你要查找的学生学号:\n");scanf("%s", Stu1);for (int i = 0; i < m; i++){if (strcmp(Stu[i].Stuid, Stu1) == 0){flag = 1;printf("学号:\t\t名字:\t年龄:\t性别:\tC语言成绩:\t高数成绩:\t大物成绩:\n");printf("%s\t%s\t%d\t%s\t%.2lf\t\t%.2lf\t\t%.2lf\n", Stu[i].Stuid, Stu[i].Stuname, Stu[i].Stuage, Stu[i].Stusex, Stu[i].score[0], Stu[i].score[1], Stu[i].score[2]);}}break;case CaoZuo3:return;default:printf("输入错误,重新选择!\n");}if (flag == 0){printf("该学生没有录入系统,请重新查找!\n");}}system("pause");
}


删除学生信息接口函数 

void ShanGai()
{int flag = 0;char arr[Number];  //定义一个数组printf("----------------------------------*学生名单*----------------------------------------------------------\n");printf("学号:\t\t名字:\t年龄:\t性别:\tC语言成绩:\t高数成绩:\t大物成绩:\n");for (int i = 0; i < m; i++){printf("%s\t%s\t%d\t%s\t%.2lf\t\t%.2lf\t\t%.2lf\n", Stu[i].Stuid, Stu[i].Stuname, Stu[i].Stuage, Stu[i].Stusex, Stu[i].score[0], Stu[i].score[1], Stu[i].score[2]);}printf("请输入你要删除学生的学号:\n");scanf("%s", arr);for (int i = 0; i < m; i++){if (strcmp(Stu[i].Stuid, arr) == 0) //查找对应的学号{flag = 1;for (int j = i; j < m - 1; j++) //m-1防止越界访问{Stu[j] = Stu[j + 1];      //整个结构体后一个覆盖前一个}}}if (flag == 0){printf("无法查找该学生信息!\n");}else{printf("删除成功,请查询系统!\n");m--;           //删除成功总人数减一printf("----------------------------------*学生名单*----------------------------------------------------------\n");printf("学号:\t\t名字:\t年龄:\t性别:\tC语言成绩:\t高数成绩:\t大物成绩:\n");for (int i = 0; i < m; i++){printf("%s\t%s\t%d\t%s\t%.2lf\t\t%.2lf\t\t%.2lf\n", Stu[i].Stuid, Stu[i].Stuname, Stu[i].Stuage, Stu[i].Stusex, Stu[i].score[0], Stu[i].score[1], Stu[i].score[2]);}}system("pause");
}

保存学生信息接口 

这里穿插一下文件的保存的函数内容: 

打开文件fopen

可以使用 fopen( ) 函数来创建一个新的文件或者打开一个已有的文件,这个调用会初始化类型 FILE 的一个对象,类型 FILE 包含了所有用来控制流的必要的信息。下面是这个函数调用的原型:

FILE *fopen( const char *filename, const char *mode );

在这里,filename 是字符串,用来命名文件,访问模式 mode 的值可以是下列值中的一个:

关闭文件fclose

为了关闭文件,请使用 fclose( ) 函数。函数的原型如下:

 int fclose( FILE *fp );

如果成功关闭文件,fclose( ) 函数返回零,如果关闭文件时发生错误,函数返回 EOF。这个函数实际上,会清空缓冲区中的数据,关闭文件,并释放用于该文件的所有内存。EOF 是一个定义在头文件 #include<stdio.h> 中的常量。

 判断是否保存文件fwrite

fwrite(file,string,length)
file必需。规定要写入的打开文件。
string必需。规定要写入打开文件的字符串。
length可选。规定要写入的最大字节数。

fwrite() 函数将内容写入一个打开的文件中,并以二进制的形式进行输出

函数会在到达指定长度或读到文件末尾(EOF)时(以先到者为准),停止运行

如果函数成功执行,则返回写入的字节数。如果失败,则返回 FALSE

退出执行文件exit

void exit(int status) 

立即终止调用进程。任何属于该进程的打开的文件描述符都会被关闭,该进程的子进程由进程 1 继承,初始化,且会向父进程发送一个 SIGCHLD 信号。 

void BaoCun()
{FILE* fp;              //文件指针char filename[Number];printf("------------------------------\n");printf("---*请输入你要保存的文件名*---\n");printf("------------------------------\n");scanf("%s", filename);if (fp = fopen("filename.txt", "a")== NULL)//fopen以.txt的形式打开文件函数{printf("打开文件失败!\n");exit(0);}for (int i = 0; i < m; i++){if (fwrite(&Stu[i], sizeof(struct Student), 1, fp) != 1){printf("保存失败!\n");}else{printf("保存成功!\n");    //返回字节数,则成功保存}}fclose(fp);   //关闭文件fp = NULL;    //防止fp变为野指针system("pause");
}

我们保存之后在这里查看保存过的文件: 

显示学生信息接口函数

void XianShi()
{if (m == 0){printf("您好!现在还暂未录入学生信息,请稍后重试");}else {printf("现在有%d名学生:\n", m);printf("-------------------------------------*成绩显示*----------------------------------------------\n");printf("学号:\t\t名字:\t年龄:\t性别:\tC语言成绩:\t高数成绩:\t大物成绩:\n");for (int i = 0; i < m; i++){printf("%s\t%s\t%d\t%s\t%.2lf\t\t%.2lf\t\t%.2lf\n", Stu[i].Stuid, Stu[i].Stuname, Stu[i].Stuage, Stu[i].Stusex, Stu[i].score[0], Stu[i].score[1], Stu[i].score[2]);}}system("pause");
}

 

 修改学生信息接口函数

void XiuGai()
{int input = 0;int  flag;char id[Number], name[Number], sex[Number];int age;double score;printf("请输入要修改的学生学号:\n");scanf("%s", &id);while (1){flag = 0;for (int i = 0; i < m; i++){if (strcmp(id, Stu[i].Stuid) == 0){flag = 1;printf("学号:\t\t名字:\t年龄:\t性别:\tC语言成绩:\t高数成绩:\t大物成绩:\n");printf("%s\t%s\t%d\t%s\t%.2lf\t\t%.2lf\t\t%.2lf\n", Stu[i].Stuid, Stu[i].Stuname, Stu[i].Stuage, Stu[i].Stusex, Stu[i].score[0], Stu[i].score[1], Stu[i].score[2]);printf("**************************************************\n");printf("----1.修改学生性别             2.修改学生姓名-----\n");printf("----3.修改学生年龄             4.修改C语言成绩----\n");printf("----5.修改高数成绩             6.修改大物成绩-----\n");printf("********************7.退出本菜单******************\n");printf("请输入你要修改的选项:\n");scanf("%d", &input);switch (input){case 1:printf("请输入要修改的性别:\n");scanf("%s", sex);strcpy(Stu[i].Stusex, sex);break;case 2:printf("请输入要修改的姓名:\n");scanf("%s",name);strcpy(Stu[i].Stuname, name);break;case 3:printf("请输入要修改的年龄:\n");scanf("%d", &age);Stu[i].Stuage = age;break;case 4:printf("请输入要修改的C语言成绩:\n");scanf("%lf", &score);Stu[i].score[0] = score;break;case 5:printf("请输入要修改的高数成绩:\n");scanf("%lf", &score);Stu[i].score[1] = score;break;case 6:printf("请输入要修改的大物成绩:\n");scanf("%lf", &score);Stu[i].score[2] = score;break;case 7:return;default:printf("选择错误,请重新选择!\n");break;}}if (1 <= input && input <= 6){printf("恭喜你修改成功!\n");break;}if (flag == 0){printf("没有找到该学生信息,请重新输入学生学号:\n");gets(name);}}}system("pause");
}

char* strcpy(char * destination, const char * source ); 

strcpy:拷贝函数,将括号右边的值拷贝到左边,详细可看我之前的博客

 学生排名信息接口函数

int PaiXu(const void* e1, const void* e2)
{return  ((struct Student*)e2)->score[0] - ((struct Student*)e1)->score[0];
}
int PaiXu1(const void* e1, const void* e2)
{return  ((struct Student*)e2)->score[0] - ((struct Student*)e1)->score[0];
}
int PaiXu2(const void* e1, const void* e2)
{return  ((struct Student*)e2)->score[2] - ((struct Student*)e1)->score[2];
}
void PaiMing()
{int input = 0;while (1){printf("\t\t**************************************************\n");printf("\t\t---------------------***光荣榜***-----------------\n");printf("\t\t**************************************************\n");printf("\t\t********1.C语言-------------------2.高数**********\n");printf("\t\t********3.大物--------------------4.退出系统******\n");printf("\t\t**************************************************\n");printf("请输入你要查询的排名:\n");scanf("%d", &input);switch (input){case 1:printf("\t学号:\t\t名字:\tC语言成绩:\n");int rs = sizeof(Stu) / sizeof(Stu[0]);qsort(Stu, rs, sizeof(Stu[0]), PaiXu);//排序for (int i = 0; i < m; i++){printf("第%d名\t%s\t%s\t%.2lf", i+1, Stu[i].Stuid, Stu[i].Stuname, Stu[i].score[0]);printf("\n");}break;case 2:printf("\t学号:\t\t名字:\t高数成绩:\n");int rs1 = sizeof(Stu) / sizeof(Stu[0]);qsort(Stu, rs1, sizeof(Stu[0]), PaiXu1);for (int i = 0; i < m; i++){printf("第%d名\t%s\t%s\t%.2lf", i+1, Stu[i].Stuid, Stu[i].Stuname, Stu[i].score[0]);printf("\n");}break;case 3:printf("\t学号:\t\t名字:\t大物成绩:\n");int rs2 = sizeof(Stu) / sizeof(Stu[0]);qsort(Stu, rs, sizeof(Stu[0]), PaiXu2);for (int i = 0; i < m; i++){printf("第%d名\t%s\t%s\t%.2lf", i+1, Stu[i].Stuid, Stu[i].Stuname, Stu[i].score[0]);printf("\n");}break;case 4:return;default:printf("选择错误,重新选择!\n");break;}}
}

我们采用qsort排序法:

void qsort (void* base, size_t num, size_t size, int (*compar)(const void*,const void*));

base首元素地址-数组名

num元素个数

size数据类型的大小

int (*compar)(const void*,const void*))比较大小的函数指针 

以下是整个代码的实现:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 20      
#define Number sizeof(struct Student)
struct Student
{char Stuid[N];    char Stuname[N];  int Stuage;        char Stusex[N];       double score[3];  
}Stu[Number];
enum menu2
{Quit = 0,Resume = 1
};
enum ChaZhao
{CaoZuo1 = 1,CaoZuo2 = 2,CaoZuo3 = 3
};int m = 0;
void menu1()
{printf("\n");system("color F4");printf("\t\t\t*****************************************************\n");printf("\t\t\t*---------------------------------------------------*\n");printf("\t\t\t*                   学生管理系统                    *\n");printf("\t\t\t*****************************************************\n");printf("\t\t\t********************系统功能菜单*********************\n");printf("\t\t\t----------------------     --------------------------\n");printf("\t\t\t*****************************************************\n");printf("\t\t\t**    1、使用帮助菜单   *     2、增加学生信息      **\n");printf("\t\t\t*****************************************************\n");printf("\t\t\t**    3、查询学生信息   *     4、删除学生信息      **\n");printf("\t\t\t*****************************************************\n");printf("\t\t\t**    5、保存当前信息   *     6、显示当前信息      **\n");printf("\t\t\t*****************************************************\n");printf("\t\t\t**    7、修改学生信息   *     8、学生成绩排名      **\n");printf("\t\t\t*****************************************************\n");printf("\t\t\t*****************************************************\n");printf("\t\t\t----------------------     --------------------------\n");
}
void menu2()
{system("color F4");printf("*********************\n");printf("*********************\n");printf("-------1.Resume------\n");printf("-------0.Quit--------\n");printf("*********************\n");
}
void TiShi()
{printf("欢迎来到学生管理系统:\n");printf("在这个管理系统中,教师和学生都不需要去了解自己的信息,只需通过网络就能实现自己的信息管理。\n");printf("教师可以轻松便捷地掌握学生相关情况、姓名、学号以及考试成绩等基本信息。\n");printf("它还提供一个搜索功能和设置权限,可以将学生的信息进行搜索,\n也可根据关键字或其他方式对其进行定位,并且还能显示出该人的相关基本资料。\n");printf("如果由技术上的缺陷还请联系项目负责人:\n唐工:2172227341@qq.com\n");system("pause");system("cls");
}
void StuXinXi()
{int i = m,flag,n = 0;printf("请输入你要添加的学生人数:\n");scanf("%d", &n);printf("--------------------------*学生信息录入系统*--------------------------------\n");if (n > 0){do {flag = 1;while (flag){flag = 0;printf("请输入第%d位学生的学号:\n", i + 1);scanf("%s", Stu[i].Stuid);for (int j = 0; j < i; j++){if (strcmp(Stu[i].Stuid, Stu[j].Stuid) == 0){printf("该学生已经录入,请重新选择!\n");flag = 1;break;}}}printf("请输入第%d学生的姓名:\n", i + 1);scanf("%s", Stu[i].Stuname);printf("请输入第%d学生的年龄:\n", i + 1);scanf("%d", &Stu[i].Stuage);printf("请输入第%d学生的性别:\n", i + 1);scanf("%s", &Stu[i].Stusex);printf("请输入第%d学生的C语言成绩:\n", i + 1);scanf("%lf", &Stu[i].score[0]);printf("请输入第%d学生的高数成绩:\n", i + 1);scanf("%lf", &Stu[i].score[1]);printf("请输入第%d学生的大物成绩:\n", i + 1);scanf("%lf", &Stu[i].score[2]);i++;} while (i < n + m);m += n;if (flag == 0){printf("添加完成!请进行下一步操作:\n");}system("pause");system("cls");}
}
void ChaZhao()
{int flag, input;char Stu1[Number];printf("\t\t\t----------*学生信息查找系统*----------\n");printf("\t\t\t**************************************\n");printf("\t\t\t******1.请输入你要查找的学生名字******\n");printf("\t\t\t******2.请输入你要查找的学生学号******\n");printf("\t\t\t******------3.退出本次操作------******\n");printf("\t\t\t**************************************\n");while (1){flag = 0;printf("请输入你要进行的查询操作:\n");scanf("%d", &input);switch (input){case CaoZuo1:printf("请输入你要查找的学生名字:\n");scanf("%s", Stu1);for (int i = 0; i < m; i++){if (strcmp(Stu[i].Stuname, Stu1) == 0){flag = 1;printf("学号:\t\t名字:\t年龄:\t性别:\tC语言成绩:\t高数成绩:\t大物成绩:\n");printf("%s\t%s\t%d\t%s\t%.2lf\t\t%.2lf\t\t%.2lf\n", Stu[i].Stuid, Stu[i].Stuname, Stu[i].Stuage, Stu[i].Stusex, Stu[i].score[0], Stu[i].score[1], Stu[i].score[2]);}}break;case CaoZuo2:printf("请输入你要查找的学生学号:\n");scanf("%s", Stu1);for (int i = 0; i < m; i++){if (strcmp(Stu[i].Stuid, Stu1) == 0){flag = 1;printf("学号:\t\t名字:\t年龄:\t性别:\tC语言成绩:\t高数成绩:\t大物成绩:\n");printf("%s\t%s\t%d\t%s\t%.2lf\t\t%.2lf\t\t%.2lf\n", Stu[i].Stuid, Stu[i].Stuname, Stu[i].Stuage, Stu[i].Stusex, Stu[i].score[0], Stu[i].score[1], Stu[i].score[2]);}}break;case CaoZuo3:return;default:printf("输入错误,重新选择!\n");}if (flag == 0){printf("该学生没有录入系统,请重新查找!\n");}}system("pause");}   
void ShanGai()
{int flag = 0;char arr[Number];printf("----------------------------------*学生名单*----------------------------------------------------------\n");printf("学号:\t\t名字:\t年龄:\t性别:\tC语言成绩:\t高数成绩:\t大物成绩:\n");for (int i = 0; i < m; i++){printf("%s\t%s\t%d\t%s\t%.2lf\t\t%.2lf\t\t%.2lf\n", Stu[i].Stuid, Stu[i].Stuname, Stu[i].Stuage, Stu[i].Stusex, Stu[i].score[0], Stu[i].score[1], Stu[i].score[2]);}printf("请输入你要删除学生的学号:\n");scanf("%s", arr);for (int i = 0; i < m; i++){if (strcmp(Stu[i].Stuid, arr) == 0) {flag = 1;for (int j = i; j < m - 1; j++) {Stu[j] = Stu[j + 1];      }}}if (flag == 0){printf("无法查找该学生信息!\n");}else{printf("删除成功,请查询系统!\n");m--;          printf("----------------------------------*学生名单*----------------------------------------------------------\n");printf("学号:\t\t名字:\t年龄:\t性别:\tC语言成绩:\t高数成绩:\t大物成绩:\n");for (int i = 0; i < m; i++){printf("%s\t%s\t%d\t%s\t%.2lf\t\t%.2lf\t\t%.2lf\n", Stu[i].Stuid, Stu[i].Stuname, Stu[i].Stuage, Stu[i].Stusex, Stu[i].score[0], Stu[i].score[1], Stu[i].score[2]);}}system("pause");
}
void BaoCun()
{FILE* fp;              char filename[Number];printf("------------------------------\n");printf("---*请输入你要保存的文件名*---\n");printf("------------------------------\n");scanf("%s", filename);if (fp = fopen("filename.txt", "a")== NULL){printf("打开文件失败!\n");exit(0);}for (int i = 0; i < m; i++){if (fwrite(&Stu[i], sizeof(struct Student), 1, fp) != 1){printf("保存失败!\n");}else{printf("保存成功!\n");}}fclose(fp);fp = NULL;  system("pause");
}
void XianShi()
{if (m == 0){printf("您好!现在还暂未录入学生信息,请稍后重试");}else {printf("现在有%d名学生:\n", m);printf("-------------------------------------*成绩显示*----------------------------------------------\n");printf("学号:\t\t名字:\t年龄:\t性别:\tC语言成绩:\t高数成绩:\t大物成绩:\n");for (int i = 0; i < m; i++){printf("%s\t%s\t%d\t%s\t%.2lf\t\t%.2lf\t\t%.2lf\n", Stu[i].Stuid, Stu[i].Stuname, Stu[i].Stuage, Stu[i].Stusex, Stu[i].score[0], Stu[i].score[1], Stu[i].score[2]);}}system("pause");
}
void XiuGai()
{int input = 0;int  flag;char id[Number], name[Number], sex[Number];int age;double score;printf("请输入要修改的学生学号:\n");scanf("%s", &id);while (1){flag = 0;for (int i = 0; i < m; i++){if (strcmp(id, Stu[i].Stuid) == 0){flag = 1;printf("学号:\t\t名字:\t年龄:\t性别:\tC语言成绩:\t高数成绩:\t大物成绩:\n");printf("%s\t%s\t%d\t%s\t%.2lf\t\t%.2lf\t\t%.2lf\n", Stu[i].Stuid, Stu[i].Stuname, Stu[i].Stuage, Stu[i].Stusex, Stu[i].score[0], Stu[i].score[1], Stu[i].score[2]);printf("**************************************************\n");printf("----1.修改学生性别             2.修改学生姓名-----\n");printf("----3.修改学生年龄             4.修改C语言成绩----\n");printf("----5.修改高数成绩             6.修改大物成绩-----\n");printf("********************7.退出本菜单******************\n");printf("请输入你要修改的选项:\n");scanf("%d", &input);switch (input){case 1:printf("请输入要修改的性别:\n");scanf("%s", sex);strcpy(Stu[i].Stusex, sex);break;case 2:printf("请输入要修改的姓名:\n");scanf("%s",name);strcpy(Stu[i].Stuname, name);break;case 3:printf("请输入要修改的年龄:\n");scanf("%d", &age);Stu[i].Stuage = age;break;case 4:printf("请输入要修改的C语言成绩:\n");scanf("%lf", &score);Stu[i].score[0] = score;break;case 5:printf("请输入要修改的高数成绩:\n");scanf("%lf", &score);Stu[i].score[1] = score;break;case 6:printf("请输入要修改的大物成绩:\n");scanf("%lf", &score);Stu[i].score[2] = score;break;case 7:return;default:printf("选择错误,请重新选择!\n");break;}}if (1 <= input && input <= 6){printf("恭喜你修改成功!\n");break;}if (flag == 0){printf("没有找到该学生信息,请重新输入学生学号:\n");gets(name);}}}system("pause");
}int PaiXu(const void* e1, const void* e2)
{return  ((struct Student*)e2)->score[0] - ((struct Student*)e1)->score[0];
}
int PaiXu1(const void* e1, const void* e2)
{return  ((struct Student*)e2)->score[0] - ((struct Student*)e1)->score[0];
}
int PaiXu2(const void* e1, const void* e2)
{return  ((struct Student*)e2)->score[2] - ((struct Student*)e1)->score[2];
}
void PaiMing()
{int input = 0;while (1){printf("\t\t**************************************************\n");printf("\t\t---------------------***光荣榜***-----------------\n");printf("\t\t**************************************************\n");printf("\t\t********1.C语言-------------------2.高数**********\n");printf("\t\t********3.大物--------------------4.退出系统******\n");printf("\t\t**************************************************\n");printf("请输入你要查询的排名:\n");scanf("%d", &input);switch (input){case 1:printf("\t学号:\t\t名字:\tC语言成绩:\n");int rs = sizeof(Stu) / sizeof(Stu[0]);qsort(Stu, rs, sizeof(Stu[0]), PaiXu);//排序for (int i = 0; i < m; i++){printf("第%d名\t%s\t%s\t%.2lf", i+1, Stu[i].Stuid, Stu[i].Stuname, Stu[i].score[0]);printf("\n");}break;case 2:printf("\t学号:\t\t名字:\t高数成绩:\n");int rs1 = sizeof(Stu) / sizeof(Stu[0]);qsort(Stu, rs1, sizeof(Stu[0]), PaiXu1);for (int i = 0; i < m; i++){printf("第%d名\t%s\t%s\t%.2lf", i+1, Stu[i].Stuid, Stu[i].Stuname, Stu[i].score[0]);printf("\n");}break;case 3:printf("\t学号:\t\t名字:\t大物成绩:\n");int rs2 = sizeof(Stu) / sizeof(Stu[0]);qsort(Stu, rs, sizeof(Stu[0]), PaiXu2);for (int i = 0; i < m; i++){printf("第%d名\t%s\t%s\t%.2lf", i+1, Stu[i].Stuid, Stu[i].Stuname, Stu[i].score[0]);printf("\n");}break;case 4:return;default:printf("选择错误,重新选择!\n");break;}}
}
int sum = 1;
int main()
{int i = 0;int input = 0, count = 0;char mima[20] = "123";//登入的密码char shuru[20];char mingzi[20];system("color F4");printf("\t\t\t     **************************************\n");printf("\t\t\t     |       *欢迎使用学生管理系统*       |\n");printf("\t\t\t     |           *管理员: 小唐*           |\n");printf("\t\t\t      ------------------------------------\n");printf("请输入管理员密码:\n");while ((count = _getch()) != '\r'){if (count == '\b'){i--;printf("\b \b");}else{shuru[i++] = count;printf("*");}}shuru[i++] = '\0';   if (strcmp(mima, shuru) == 0){printf("\n密码正确,您已进入系统!\n");}else{printf("\n密码错误,请重新输入!\n");return 0;}system("pause");system("cls");do{menu2();printf("请选择继续还是结束操作:\n");scanf("%d", &sum);switch (sum){case Quit:system("cls");printf("您已退出学生管理系统!\n");break;case Resume:menu1();void(*p[9])() = { NULL,TiShi,StuXinXi,ChaZhao,ShanGai,BaoCun,XianShi,XiuGai,PaiMing };//指针数组函数printf("请输入你要进行的操作\n");scanf("%d", &input);system("cls");(*p[input])();break;default:printf("输入错误,重新输入!\n");break;}} while (sum);return 0;
}

相关文章:

C语言搭建项目-学生管理系统(非链表)

、 目录 搭建offer.h文件 搭建offer.c中的main函数 密码登入系统 搭建my_oferr.c中的接口函数 使用帮助菜单接口函数 增加学生信息接口函数 查询学生信息接口函数 删除学生信息接口函数 保存学生信息接口 打开文件fopen 关闭文件fclose 判断是否保存文件fwrite 退出执行文件…...

美易官方:投资美股证券投资组合的优势及快速上手指南

投资美股证券投资组合的优势及快速上手指南 美股证券投资组合的优势 美国股市一直以来都是全球投资者的热门选择之一。与其他市场相比&#xff0c;美国股市具有诸多优势&#xff0c;如市场规模大、流动性好、信息透明度高等。投资者在美国股市中&#xff0c;可以选择各种不同类…...

centos日常运维随记

# 需要生成随机字符及数字 rootAAA:~# echo $RANDOM | md5sum |cut -c 3-29 e7e8942a791146531f613c7c757 # echo $RANDOM 产生随机数据 # md5sum 随机数生成md5值 # cut -c 3-29 :md5产生的是32的md5数&#xff0c;使用cut -c 对这个数进行 第3位到第29位的截取# 在现有的…...

设计模式之观察者模式(主题对象发生变化,通知各个观察者)

当涉及到电商场景时&#xff0c;观察者模式可以用于处理多种情况&#xff0c;比如订单状态更新、库存变化、用户积分变化等。下面是一个简化的订单状态更新的观察者模式案例。 1.首先&#xff0c;定义一个主题接口 OrderSubject /*** Description:主题&#xff0c;用于管理观察…...

vue+高德,百度地图

1&#xff0c;npm安装vue-amap npm install vue-amap --save 2&#xff0c;main.js引入 import VueAMap from vue-amap; Vue.use(VueAMap); VueAMap.initAMapApiLoader({key: ,plugin: [AMap.Autocomplete, AMap.PlaceSearch, AMap.Scale, AMap.OverView, AMap.ToolBar, AMap.…...

工信部举行发布会 数字化产业推动元宇宙发展取得良好成效

据官方消息&#xff0c;工业和信息化部12日举行“发挥国家高新区作用 加快推进新型工业化”新闻发布会。 在数字化建设方面取得了良好的成绩&#xff1a; 一是数字经济加速发展。国家高新区着力推动人工智能、大数据、云计算、区块链和元宇宙等新产业新业态蓬勃发展&#xff…...

有没有手机电脑同步的工作时间管理软件?

越来越多的职场人士感到每天的工作任务是比较多的&#xff0c;而工作时间又是有限的&#xff0c;所以经常时间不够用。因此&#xff0c;对于上班族来说&#xff0c;高效的时间管理是提高工作效率、按时完成任务的关键。为了满足这一需求&#xff0c;很多网友都在寻找一款既能在…...

docker安装及简单使用(Linux版本)

文章目录 前言一、docker安装二、docker命令pull&#xff08;安装镜像&#xff09;rmi&#xff08;删除镜像&#xff09;images&#xff08;查看镜像&#xff09;run&#xff08;创建容器&#xff09;删除容器exec&#xff08;进入运行中的容器&#xff09;常用命令 总结如有启…...

山西电力市场日前价格预测【2023-12-10】

1.日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-12-10&#xff09;山西电力市场全天平均日前电价为384.75元/MWh。其中&#xff0c;最高日前价格为493.66元/MWh&#xff0c;预计出现在16: 00。最低日前电价为282.24元/MWh&#xff0c;预…...

在OpenCV基于深度学习的超分辨率模型实践

1. 引言 OpenCV是一个开源的计算机视觉库&#xff0c;拥有大量优秀的算法。基于最新的合并&#xff0c;OpenCV包含一个易于使用的接口&#xff0c;主要用于实现基于深度学习方法的超分辨率&#xff08;SR&#xff09;。该接口包含预先训练的模型&#xff0c;这些模型可以非常容…...

beebox靶场A3 中等级别 xss通关教程

特别注意&#xff0c;低级和中级的差别在于中级使用了一些函数进行了过滤或转义字符 例如 addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。 预定义字符是&#xff1a; 单引号&#xff08;&#xff09;双引号&#xff08;"&#xff09;反斜杠&#xff08;\&…...

前端知识笔记(二)———Django与Ajax

特点&#xff1a; 异步提交 局部刷新 例子&#xff1a;github注册 动态获取用户名实时的跟后端确认并实时的展示到前端&#xff08;局部刷新&#xff09; 朝后端发送请求的方式 1.浏览器地址栏直接输入url回车 -----》get请求 2.a标签的href属性 -----》get请求 3…...

C++新经典模板与泛型编程:用成员函数重载实现is_base_of

用成员函数重载实现is_base_of std::is_base_of是一个C 11标准中用于判断某个类是否是另一个类父类的类模板。 #include "killCmake.h"#include<string>using namespace std;class A { };class B : public A { public:B(int x): x_(x){} private:int x_; };/…...

【vue3】处理数组方法,在数组中获取指定条件所在的数组对象等持续更新笔记~~

1、在数组中获取指定条件所在的数组对象 &#xff08;1&#xff09;filter方法获取到的是包含指定项的数组 data.checkRow res.result.filter(item > item.checked 1);打印&#xff1a; &#xff08;2&#xff09;map方法取到的是包含指定项的数组&#xff0c;如果满足…...

digit函数

题目描述 在程序中定义一函数 digit(n,k)&#xff0c;它能分离出整数 n 从右边数第 k 个数字。 输入格式 正整数 n 和 k。 输出格式 一个数字。 输入输出样例 输入 #1 31859 3 输出 #1 8 说明/提示 n≤10^9。 k≤10。 因为用整数n来做有点难&#xff0c;所以我用…...

Linux中的堡垒机搭建以及使用

JumpServer搭建 安装应用包 curl -sSL https://resource.fit2cloud.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash 一路回车即可安装完毕&#xff08;可根据需求更改&#xff09; JumpServer的 配置文件路径 /opt/jumpserver/config/config.tx…...

ubuntu安装微信客户端

安装 Wine 环境 Wine环境包下载地址&#xff1a;http://archive.ubuntukylin.com/software/pool/partner/ukylin-wine_70.6.3.25_amd64.deb 下载完安装包后在命令行运行以下命令安装环境&#xff1a; sudo apt-get install -f -y ./ukylin-wine_70.6.3.25_amd64.deb 安装微信…...

ajax清空所有表单内容,包括input标签、单选框radio、多选框CheckBox、下拉框select以及文本域内容

为了实现重置并清空表单内容&#xff0c;你可以使用 jQuery 的 val 方法将各种表单元素的值设置为空字符串&#xff0c;并通过 layui 的 form.render 方法来更新表单的渲染。以下是修改后的代码&#xff1a; layui.use(["form", "laydate", "jquery&…...

通配符用法

在本篇文章中&#xff0c;本文将说明通配符用法。 &#xff08;1&#xff09;概述 通配符是在Linux命令中用于匹配文件名的特殊字符。它们可以帮助我们快速定位和操作文件。本文将介绍一些常用的通配符及其示例用法。 通配符是一种用于模式匹配的特殊字符。在计算机领域中&am…...

如何从eureka-server上进行服务发现,负载均衡远程调用服务

在spring cloud的maven的pom文件中添加eureka-client的依赖坐标 <!--eureka-client依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependen…...

Flutter实现Android拖动到垃圾桶删除效果-Draggable和DragTarget的详细讲解

文章目录 Draggable介绍构造函数参数说明使用示例 DragTarget 介绍构造函数参数说明使用示例 DragTarget 如何接收Draggable传递过来的数据&#xff1f; Draggable介绍 Draggable是Flutter框架中的一个小部件&#xff0c;用于支持用户通过手势拖动一个子部件。它是基于手势的一…...

Nacos和Eureka冲突问题原因分析

目录 一、问题现象二、解决办法三、原因分析 一、问题现象 Description:Field autoServiceRegistration in org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration required a single bean, but 2 were found:- eurekaAutoServiceRegis…...

『C++成长记』拷贝构造函数

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;C &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、拷贝构造函数 &#x1f4d2;1.1拷贝构造函数的概念 &#x1f4d2;1.2拷贝构造…...

B 站基于 StarRocks 构建大数据元仓

作者&#xff1a;bilibili 大数据高级开发工程师 杨洋 B站大数据元仓是一款用来观测大数据引擎运行情况、推动大作业治理的系统诊断产品。经过调研和性能测试&#xff0c;大数据元仓最终以 StarRocks 为技术底座&#xff0c;从实际的应用效果来看&#xff0c;大部分查询都能在几…...

最常用的4种光纤接口结构

光纤接口&#xff0c;全名是光纤活动连接器。光纤连接器就是用于光纤与光纤之间进行可拆卸连接的器件&#xff0c;它是把光纤的两个端面精密的对接起来&#xff0c;使光能量前后达到最大程度的耦合。 光纤连接器属于高精密的器件&#xff0c;最常见结构形式可分包括&#xff1a…...

Axure网页端高交互组件库, 下拉菜单文件上传穿梭框日期城市选择器

作品说明 组件数量&#xff1a;共 11 套 兼容软件&#xff1a;Axure RP 9/10&#xff0c;不支持低版本 应用领域&#xff1a;web端原型设计、桌面端原型设计 作品特色 本作品为「web端组件库」&#xff0c;高保真高交互 (带仿真功能效果)&#xff1b;运用了动态面板、中继…...

基于Java新人入职管理系统

基于Java新人入职管理系统 功能需求 1、个人信息管理&#xff1a;系统需要提供个人信息管理功能&#xff0c;包括新人的基本信息、联系方式、教育背景、工作经历等。 2、入职流程管理&#xff1a;系统需要提供入职流程管理功能&#xff0c;包括入职手续的办理、合同签订、入…...

Python实战 | 如何抓取腾讯视频

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 爬虫: 作用: 批量采集数据 / 模拟用户行为 原理: 模拟成 客户端 向 服务器 发送网络请求 环境介绍: python 3.8 解释器 pycharm 编辑器 第三方模块: reques…...

总结MySQL 的一些知识点:MySQL 导出数据

MySQL 导出数据 MySQL中你可以使用SELECT...INTO OUTFILE语句来简单的导出数据到文本文件上。 使用 SELECT ... INTO OUTFILE 语句导出数据 以下实例中我们将数据表 kxdang_tbl 数据导出到 /tmp/kxdang.txt 文件中: mysql> SELECT * FROM kxdang_tbl -> INTO OUTFILE /…...

C语言-字符串操作函数-附加使用方式

文章目录 前言字符串复制-strcpy字符串复制&#xff08;按照位数&#xff09;-strncpy字符串比较-strcmp字符串比较(按照位数)-strncmp不区分大小写的字符串比较-strcasecmp不区分大小写的比较(前n位)-strncasecmp字符串按照格式写入-sprintf字符串按照格式和个数写入-snprintf…...