从大一刚开学初登csdn,现在已是寒假假期过半,把最近刚完成不久的学生成绩管理系统给各位同学学习参考,另外由于本人才大一零基础入门学的C,若有错误纰漏中指出望见谅,也欢迎各位看官予以指正。这里还要特别感谢CSDN博主「photoer_coder」的原创文章,对本文章提供很多参考,也欢迎各位去学习参考他的文章,这是他的原文链接:https://blog.csdn.net/qq_41728697/article/details/80991027

/*************************************
*******程序名称:学生成绩管理系统
*******作    者:
*******开发环境:vs2019
*******创建日期:2022.01.21
*******完成日期:2018.01.27
**************************************/#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<windows.h>//system()函数;gotoxy()函数,在控制台中可以随意操控光标位置。
#include<ctype.h>//使用isprint()函数,检测所获字符是否可打印。#define YES 1
#define NO 0
typedef struct
{int id;float gaoshu;float yuwen;float yingyu;double aver_score;double sum_score;char sex;
}StudentDate;
typedef struct student
{StudentDate one;char name[20];int rank;struct student *next;
}Student, *List;Student* CreatListHead();								//创建链表头
Student* startCheck();								    //登录系统并初始化密码
void passwordCheck();									//密码判断
void correctWord();										//修改密码
void menu();											//主菜单(列出系统功能)
int scanMenu();											//查看、删除功能的选择菜单
int statisMenu();										//统计功能的菜单
int userChoice(Student *phead);							//对主菜单的功能进行选择
void addStudentInfo(Student *phead);					//添加学生信息(向链表末尾添加数据)(添加功能)
void inputData(Student *phead, Student *note);			//添加并检查录入信息是否正确
void delStudentInfo(Student *phead);					//删除学生信息(删除功能)
void alterStudentInfo(Student *phead);					//修改学生信息(修改功能)
void findStudentInfo(Student *phead);					//查看学生信息(查看功能)
void statisStudentInfo(Student* phead);					//统计学生信息(统计功能)
void readListWithFile(Student *phead, char *file_name); //从文件读取数据并保存到链表
void sortList(Student *phead);							//对链表排序
void saveList(Student *phead);							//将链表保存在文件中
void printList(Student *phead);							//打印链表
void gotoxy(int x, int y);								//操控光标位置int main()
{Student* pHead;HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);//得到窗口句柄SMALL_RECT rc = { 0, 0, 94 - 1, 30 - 1 };   //{Y位置,X位置,宽,高}SetConsoleWindowInfo(hOut, TRUE, &rc);// 重置窗口位置和大小,这里vs2019用大写字母的truesystem("color F1");//设置控制台颜色pHead = startCheck();//登录系统while (1){if (9 == userChioce(pHead)) //根据用户选择对主菜单的功能进行选择,按9时退出系统{break;}}return 0;
}
/*================================================
== 函数名:Student *startCheck()
== 功  能:登陆系统并初始化密码
== 参  数:无
== 返回值:链表的头指针
=================================================*/Student* startCheck()
{Student* pHead;FILE* fp1;char password[20] = "111111";int i;if ((fp1 = fopen("password.dat", "rb")) == NULL)//若密码文件不存在,新建密码文件{fp1 = fopen("password.dat", "wb");fwrite(password, 20, 1, fp1);//把1个大小为20字节的数据(这里指的是passward这个字符数组)写到fp1指向的文件fclose(fp1);printf("密码初始化完成!(默认密码为:111111)");}//读条system("CLS");system("title 学生成绩管理系统-载入中");//将标题栏命名为“学生成绩统计系统”printf("\n\n\t\t\t欢迎进入本系统!正在载入.....");printf("\n\n\n\n\t\t\t┏━━━━━━━━━━━━━━━━━━━━┓\n");printf("\t\t\t┃                    ┃\n");printf("\t\t\t┗━━━━━━━━━━━━━━━━━━━━┛\n");gotoxy(26, 7);for (i = 0; i < 10; i++){printf("█");Sleep(100);}pHead = CreatListHead();readListWithFile(pHead, "stud.dat");//从文件读取数据并保存到链表return pHead;
}
/*================================================
== 函数名:void passwordCheck()
== 功  能:密码输入及判定
== 参  数:无
== 返回值:无
=================================================*/
void passwordCheck()
{char password[20], inputword[20];int i = 1, j = 0;char c = 0;FILE* fp = fopen("password.dat", "rb");system("title 学生成绩管理系统-密码输入");fread(password, 20, 1, fp);//从fp指向的文件中读取出password这个数据for (i = 0; i < 3; i++){j = 0;if (i > 0){printf("\n\n\n\t\t你还有%d次机会输入正确密码: ", 3 - i);}printf("\n\n\n\n\t\t\t┏━━━━━━━━━━━━━━━━┓\n");printf("\t\t\t┃                ┃\n");printf("\t\t\t┗━━━━━━━━━━━━━━━━┛\n");gotoxy(26, 8);while ((c = _getch()) != 13 && j < 20)//使用的是getch函数,从键盘上获取一个字符,但不显示在屏幕上{if (c == '\b' && j > 0)//判断用户是否按退格键,'/b'+字符:会覆盖签一个字符{putchar('\b');putchar(' ');putchar('\b');j--;}else{if (isprint(c))//isprint为检测c是否为可打印的字符{putchar('*');inputword[j] = c;j++;}}}inputword[j] = '\0';if (strcmp(inputword, password) == 0){return;}else{system("CLS");printf("\t\t\t密码输入错误");}}if (3 == i){system("CLS");printf("\n\n\n\t\t你已浪费所有机会!程序即将退出!");Sleep(2000);exit(0);}fclose(fp);system("CLS");return;
}
/*================================================
== 函数名:Student *createListHead()
== 功  能:创建一个单链表,创建链表头
== 参  数:无
== 返回值:返回链表的头指针
=================================================*/
Student* CreatListHead()
{Student* pHead;pHead = (List)malloc(sizeof(Student));pHead->next = NULL;return pHead;
}
/*================================================
== 函数名:void readListWithFile(Student *pHead, char *file_name)
== 功  能:将文件内的信息读取到链表中,是登陆系统后将之前录入的数据数据读到链表里
== 参  数:Student *pHead:链表头指针char *file_name:文件指针
== 返回值:无
=================================================*/
void readListWithFile(Student* pHead, char* file_name)
{FILE* fp;Student* p1, * p2;int count, rank = 0;StudentDate dat;char stu_name[20];fp = fopen(file_name, "r");if (fp == NULL){fp = fopen(file_name, "w");fclose(fp);return;}fseek(fp, 0L, 2);//把位置指针移动到离文件结尾0字节处count = ftell(fp);//返回当前文件指针相对于文件开头的位移量p1 = pHead;fp = fopen(file_name, "r");while (!feof(fp))//判断文件指针是否到达文件末尾,是则feof函数返回非0值,反之返回0{p2 = (List)malloc(sizeof(Student));fscanf(fp, "%d %s %c %f %f %f\n", &p2->one.id, p2->name, &p2->one.sex, &p2->one.gaoshu,&p2->one.yuwen, &p2->one.yingyu);//从fp指向的文件中读取数据p2->one.sum_score = (double)(p2->one.gaoshu + p2->one.yuwen + p2->one.yingyu);p2->one.aver_score = p2->one.sum_score / 3;p2->next = NULL;p1->next = p2;//(p1==phead,故此处对链表第一组数据赋值)p1 = p2;if (ftell(fp) == count)//判断是否写到文件末尾{break;}}//将链表排序,并初始化排名(p1指向第一组数据,p2指向第二组数据)for (p1 = pHead->next; p1 != NULL; p1 = p1->next){for (p2 = p1->next; p2 != NULL; p2 = p2->next){if (p2->one.aver_score > p1->one.aver_score){dat = p2->one;strcpy(stu_name, p2->name);p2->one = p1->one;strcpy(p2->name, p1->name);p1->one = dat;strcpy(p1->name, stu_name);}}p1->rank = ++rank;}fclose(fp);
}
/*================================================
== 函数名:void menu()
== 功  能:菜单显示
== 参  数:无
== 返回值:无
=================================================*/
void menu()
{system("CLS");//清屏printf("\n\n\n\t\t\t\t┌──────────────────────────────────┐\n");printf("\t\t\t\t│         学生成绩管理系统         │\n");printf("\t\t\t\t├──────────────────────────────────┤\n");printf("\t\t\t\t│         1   添加学生记录         │\n");printf("\t\t\t\t├──────────────────────────────────┤\n");printf("\t\t\t\t│         2   删除学生记录         │\n");printf("\t\t\t\t├──────────────────────────────────┤\n");printf("\t\t\t\t│         3   修改学生记录         │\n");printf("\t\t\t\t├──────────────────────────────────┤\n");printf("\t\t\t\t│         4   查找学生信息         │\n");printf("\t\t\t\t├──────────────────────────────────┤\n");printf("\t\t\t\t│         5   统计学生成绩         │\n");printf("\t\t\t\t├──────────────────────────────────┤\n");printf("\t\t\t\t│         6   查看学生成绩         │\n");printf("\t\t\t\t├──────────────────────────────────┤\n");printf("\t\t\t\t│         7   修改登陆密码         │\n");printf("\t\t\t\t├──────────────────────────────────┤\n");printf("\t\t\t\t│         8      关于              │\n");printf("\t\t\t\t├──────────────────────────────────┤\n");printf("\t\t\t\t│         9    退出系统            │\n");printf("\t\t\t\t└──────────────────────────────────┘\n");
}
/*================================================
== 函数名:int userChioce(Student *pHead)
== 功  能:用户功能选择
== 参  数:链表头指针
== 返回值:功能对应整型数
=================================================*/
int userChioce(Student* pHead)
{int bum;system("title 学生成绩管理系统-主菜单");menu();printf("请按键选择: ");bum = (int)(_getch() - '0');switch (bum){case 1:printf("\n添加学生信息\n请输入密码:");passwordCheck();addStudentInfo(pHead);break;case 2:printf("\n删除学生信息\n请输入密码:");passwordCheck();delStudentInfo(pHead);break;case 3:printf("\n修改学生信息\n请输入密码:");passwordCheck();alterStudentInfo(pHead);break;case 4:findStudentInfo(pHead);break;case 5:statisStudentInfo(pHead);break;case 6:sortList(pHead);break;case 7:correctWord();break;case 8:MessageBox(NULL, TEXT("名称:学生成绩管理系统\n学校:岭南师范学院\n作者:21电气3 吴健昇"), TEXT("关于"), MB_OK);//设置弹窗(第二个参数是弹窗内容,第三个是标题)break;case 9:break;default:break;}return bum;
}/*================================================
== 函数名:void addStudentInfo(Student *pHead)
== 功  能:向链表末尾添加数据
== 参  数:链表头指针
== 返回值:无
=================================================*/
void addStudentInfo(Student* pHead)
{FILE* fp;Student* p1, * p2, * p3 = pHead;StudentDate dat;int judge = YES, rank = 0;char bum, stu_name[20];system("title 学生成绩管理系统-添加");fp = fopen("stud.dat", "a");while (pHead->next)//第一个while循环是使头指针指到链表末尾,才可以继续添加数据{pHead = pHead->next;}while (judge){p1 = (List)malloc(sizeof(Student));inputData(p3, p1);p1->next = NULL;pHead->next = p1;pHead = p1;fprintf(fp, "%d %s %c %.1f %.1f %.1f\n", p1->one.id, p1->name, p1->one.sex, p1->one.gaoshu,//这里是将我们刚才在inputDate里输入的数据写到fp所指向的文件p1->one.yuwen, p1->one.yingyu);printf("是否继续添加?(Y/N)");bum = _getch();if (bum == 'n' || bum == 'N'){break;}}//并交换排名for (p1 = p3->next; p1 != NULL; p1 = p1->next){for (p2 = p1->next; p2 != NULL; p2 = p2->next){if (p2->one.aver_score > p1->one.aver_score){dat = p2->one;strcpy(stu_name, p2->name);p2->one = p1->one;strcpy(p2->name, p1->name);p1->one = dat;strcpy(p1->name, stu_name);}}p1->rank = ++rank;}fclose(fp);
}
/*================================================
== 函数名:void inputData(Student *pHead, Student *node)
== 功  能:输入信息并检测是否合法
== 参  数:Student *pHead:链表头指针Student *node:链表工作指针
== 返回值:无
=================================================*/
void inputData(Student* pHead, Student* node)
{Student* p1 = node, * p2, * p3 = pHead;//指针node指向新申请的内存空间,此处将其赋给指针p1system("CLS");printf("\n\n\t请依次输入学生的学号、姓名、性别、高数、语文、英语\n");printf("\t注意:姓名不能有空格,性别男用M表示,女用W表示,\n\t各科成绩应该大于0小于100,输入数据时请用空格隔开\n");scanf("%d %s %c %f %f %f", &p1->one.id, p1->name, &p1->one.sex, &p1->one.gaoshu, &p1->one.yuwen, &p1->one.yingyu);// 判断输入的学号是否已经存在p2 = p3->next;while (1){if (p2 == NULL)//第一次添加数据,此时p2是phead->next,故为NULL,后边没有学号需要比对,故直接退出循环,进入下个循环{break;}if (p2->one.id == p1->one.id && p2 != node)//在上一个函数中此处的p1是新申请的内存块,现已录入数据,与前者对比信息。另外此处的p2!=node是用于修改信息时不需进入此步骤而设设立的{printf("该学号已存在,请重新输入学号:");scanf("%d", &p1->one.id);p2 = p3->next;}else{p2 = p2->next;}}//性别是否合法while (1){if (p1->one.sex != 'W' && p1->one.sex != 'M'){p1->one.sex = getchar();printf("性别输入不合法,请重新输入: ");p1->one.sex = getchar();}else{break;}}//成绩是否合法while (1){if (p1->one.gaoshu < 0 || p1->one.gaoshu  > 100){printf("高数成绩输入不合法,请重新输入:");scanf("%f", &p1->one.gaoshu);}if (p1->one.yuwen < 0 || p1->one.yuwen> 100){printf("语文成绩输入不合法,请重新输入:");scanf("%f", &p1->one.yuwen);}if (p1->one.yingyu < 0 || p1->one.yingyu > 100){printf("英语成绩输入不合法,请重新输入:");scanf("%f", &p1->one.yingyu);}if (p1->one.gaoshu >= 0 && p1->one.gaoshu <= 100 && p1->one.yuwen >= 0&& p1->one.yuwen <= 100 && p1->one.yingyu >= 0 && p1->one.yingyu <= 100){break;}}p1->one.sum_score = (double)(p1->one.gaoshu + p1->one.yuwen + p1->one.yingyu);p1->one.aver_score = p1->one.sum_score / 3;
}
/*================================================
== 函数名:int scanMenu()
== 功  能:查询菜单显示和选择
== 参  数:无
== 返回值:功能对应整型数
=================================================*/
int scanMenu()
{int bum;system("CLS");printf("\n\n\n");printf("\t\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");printf("\t\t┃                       以什么方式查询 ?                  ┃\n");printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");printf("\t\t┃                    1   按学生的学号                      ┃\n");printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");printf("\t\t┃                    2   按学生的姓名                      ┃\n");printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");printf("\t\t┃                    3   返回主菜单                        ┃\n");printf("\t\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");printf("请按键选择:");bum = (int)(_getch() - '0');system("CLS");return bum;
}
/*================================================
== 函数名:void saveList(Student *pHead)
== 功  能:将链表保存在文件,主要是数据改动后保存信息
== 参  数:链表头指针
== 返回值:无
=================================================*/
void saveList(Student* pHead)
{FILE* fp;fp = fopen("stud.dat", "w+");pHead = pHead->next;while (pHead){fprintf(fp, "%d %s %c %.1f %.1f %.1f\n", pHead->one.id, pHead->name, pHead->one.sex, pHead->one.gaoshu,pHead->one.yuwen, pHead->one.yingyu);pHead = pHead->next;}fclose(fp);
}
/*================================================
== 函数名:void delStudentInfo(Student *pHead)
== 功  能:删除数据
== 参  数:链表头指针
== 返回值:无
=================================================*/
void delStudentInfo(Student* pHead)
{Student* p1, * p2 = pHead;int bum;int num, count = 0;char student_name[20], c;system("title 学生成绩管理系统-删除");//将标题栏命名为“学生成绩统计系统”bum = scanMenu();if (bum == 1){p1 = pHead->next;printf("\n\t\t\t请输入要删除学生的学号:");scanf("%d", &num);while (p1){if (p1->one.id == num){count = 1;printf("\n\t\t\t删除成功,删除的学生学号为:%d", num);if (p1->next == NULL){pHead->next = NULL;break;}else{pHead->next = p1->next;free(p1);p1 = pHead->next;}}else{pHead = pHead->next;p1 = pHead->next;}}}else{if (bum == 2){p1 = pHead->next;printf("\n\t\t\t请输入要删除的学生姓名:");scanf("%s", student_name);//统计一共有多少个学生while (p1){if (strcmp(p1->name, student_name) == 0){count++;}p1 = p1->next;}if (count > 0){printf("'\n\n\n\t\t\t一共有%d个人的信息 全部删除(Y) or 逐一删除(N)?", count);//选择全部删除,还是逐一删除c = _getch();//全部删除if (c == 'y' || c == 'Y'){p1 = pHead->next;while (p1){if (strcmp(p1->name, student_name) == 0){printf("\n\t\t\t删除成功,姓名为: %s", student_name);if (p1->next == NULL)//如果所删除的链表的下一段链表为空,则将当前的链表里的指针成(即next)赋值为空{pHead->next = NULL;break;}else//如果所删除的链表后边还有数据,则将当前链表的前一个结构体与它的后一个相连{pHead->next = p1->next;free(p1);p1 = pHead->next;}}else//如果所查找的学生名字与当前的链表所存放的信息不一致,则将指针移到链表的下一个成员,再对比{pHead = pHead->next;p1 = pHead->next;}}}else{//逐一删除p1 = pHead->next;while (p1){if (strcmp(p1->name, student_name) == 0){printf("\n姓名:%s,学号:%d,性别:%c  是否删除(y or n)?", p1->name, p1->one.id, p1->one.sex);c = _getch();if (c == 'y' || c == 'Y'){if (p1->next == NULL){pHead->next = NULL;break;}else{pHead->next = p1->next;free(p1);p1 = pHead->next;}printf("成功!");}else//如果与所查找的人重名,则在选择不删除后继续往后查找{pHead = pHead->next;p1 = pHead->next;}}else//如果与所查找的学生姓名不一致,则移动指针到链表下一位成员,继续查找{pHead = pHead->next;p1 = pHead->next;}}}}}else{if (bum == 3){return;}else{delStudentInfo(pHead);}}}if (count == 0){printf("\n\t\t\t没有该学生信息!");}else{saveList(p2);}_getch();//防止函数运行完直接退出
}
/*================================================
== 函数名:void alterStudentInfo(Student *pHead)
== 功  能:修改学生信息
== 参  数:链表头指针
== 返回值:无
=================================================*/
void alterStudentInfo(Student* pHead)
{int bum, count = 0, j = 0;int num;char student_name[20];Student* p1 = pHead->next;system("title 学生成绩管理系统-修改");bum = scanMenu();if (bum == 1){printf("\n\t\t\t请输入要修改学生的学号:");scanf("%d", &num);while (p1){j++;if (p1->one.id == num){inputData(pHead, p1);break;}p1 = p1->next;}if (p1 == NULL){_getch();printf("没有该学生信息!");}}else{if (bum == 2){printf("\n\t\t\t请输入要修改学生的姓名:");scanf("%s", student_name);while (p1){j++;if (strcmp(p1->name, student_name) == 0){inputData(pHead, p1);count = 1;}p1 = p1->next;}if (count == 0){printf("\n\t\t\t没有该学生信息!");_getch();}}else{if (3 == bum){return;}else{alterStudentInfo(pHead);}}}saveList(pHead);
}
/*================================================
== 函数名:void findStudentInfo(Student *pHead)
== 功  能:数据查找,查找所需学生信息
== 参  数:链表头指针
== 返回值:无
=================================================*/
void findStudentInfo(Student* pHead)
{int bum, count = 0;int num;char student_name[20];pHead = pHead->next;system("title 学生成绩管理系统-查找");bum = scanMenu();if (bum == 1){printf("请输入学生的学号:");scanf("%d", &num);while (pHead){if (pHead->one.id == num){if (count == 0){printf("\n\t\t\t已经查到!\n");printf("\n\  ┏━━━━━━┳━━━━━━━━┳━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━┓");printf("\n  ┃ 学号 ┃ 姓 名  ┃性别┃高  数┃语  文┃ 英  语 ┃平均分┃总  分┃名次┃\n");count = 1;}printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", pHead->one.id,pHead->name, pHead->one.sex, pHead->one.gaoshu, pHead->one.yuwen,pHead->one.yingyu, pHead->one.aver_score, pHead->one.sum_score, pHead->rank);break;}pHead = pHead->next;}if (pHead == NULL){printf("\n\t\t\t没有该学生记录!\n");}else{printf("  ┗━━━━━━┻━━━━━━━━┻━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━┛\n");}}else{if (bum == 2){printf("请输入学生姓名:");scanf("%s", student_name);while (pHead){if (strcmp(student_name, pHead->name) == 0){if (count == 0){printf("\n\t\t\t已经查到!\n");printf("\n\  ┏━━━━━━┳━━━━━━━━┳━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━┓");printf("\n  ┃ 学号 ┃ 姓 名  ┃性别┃高  数┃语  文┃ 英  语 ┃平均分┃总  分┃名次┃\n");count = 1;}printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", pHead->one.id,pHead->name, pHead->one.sex, pHead->one.gaoshu, pHead->one.yuwen,pHead->one.yingyu, pHead->one.aver_score, pHead->one.sum_score, pHead->rank);}pHead = pHead->next;}if (count == 0){printf("\n\t\t\t没有该学生记录!");}else{printf("  ┗━━━━━━┻━━━━━━━━┻━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━┛\n");}}else{if (bum == 3){return;}else{findStudentInfo(pHead);}}}_getch();
}
/*================================================
== 函数名:int statisMenu()
== 功  能:统计功能的菜单
== 参  数:无
== 返回值:方式对应整型数
=================================================*/
int statisMenu()
{int bum;system("CLS");printf("\n\n\n");printf("\t\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");printf("\t\t┃                   以什么方式统计学生信息?               ┃\n");printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");printf("\t\t┃                      1   按平均分                        ┃\n");printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");printf("\t\t┃                      2   按是否合格                      ┃\n");printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");printf("\t\t┃                      3   返回主菜单                      ┃\n");printf("\t\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");printf("请按键选择:");bum = (int)(_getch() - '0');system("CLS");return bum;
}/*================================================
== 函数名:void statisStudentInfo(Student *pHead)
== 功  能:统计学生信息后并查看
== 参  数:链表头指针
== 返回值:无
=================================================*/void statisStudentInfo(Student* pHead)
{double aver_score[5] = { 0,0,0,0,0 };Student* p1 = pHead->next;int count = 0;int bad = 0, bum;system("title 学生成绩管理系统-统计");bum = statisMenu();if (bum == 1){while (p1){aver_score[0] = aver_score[0] + p1->one.gaoshu;aver_score[1] = aver_score[1] + p1->one.yuwen;aver_score[4] = aver_score[4] + p1->one.yingyu;p1 = p1->next;count++;//统计学生总数}aver_score[0] = aver_score[0] / count;//数组arver_score[0]存放高数平均分aver_score[1] = aver_score[1] / count;//数组arver_score[1]存放语文平均分aver_score[4] = aver_score[4] / count;//数组arver_score[4]存放英语平均分p1 = pHead->next;printf("\n\n  ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");printf("  ┃\t高数的平均分为:%.1f,没有达到达到平均分的学生有        ┃\n", aver_score[0]);printf("  ┣━━━━━━┳━━━━━━━━┳━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━┫\n");printf("  ┃ 学号 ┃ 姓 名  ┃性别┃高  数┃语  文┃  英 语 ┃平均分┃总  分┃名次┃\n");printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");while (p1){if (p1->one.gaoshu < aver_score[0]){if (bad == 0){printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", p1->one.id,p1->name, p1->one.sex, p1->one.gaoshu, p1->one.yuwen,p1->one.yingyu, p1->one.aver_score, p1->one.sum_score, p1->rank);}else{printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", p1->one.id,p1->name, p1->one.sex, p1->one.gaoshu, p1->one.yuwen,p1->one.yingyu, p1->one.aver_score, p1->one.sum_score, p1->rank);}bad = 1;}p1 = p1->next;}bad = 0;p1 = pHead->next;printf("  ┣━━━━━━┻━━━━━━━━┻━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━┫\n");printf("  ┃\t语文的平均分为:%.1f,没有达到达到平均分的学生有        ┃\n", aver_score[1]);printf("  ┣━━━━━━┳━━━━━━━━┳━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━┫\n");printf("  ┃ 学号 ┃ 姓 名  ┃性别┃高  数┃语  文┃  英 语 ┃平均分┃总  分┃名次┃\n");printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");while (p1){if (p1->one.yuwen < aver_score[1]){if (bad == 0){printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", p1->one.id,p1->name, p1->one.sex, p1->one.gaoshu, p1->one.yuwen,p1->one.yingyu, p1->one.aver_score, p1->one.sum_score, p1->rank);}else{printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", p1->one.id,p1->name, p1->one.sex, p1->one.gaoshu, p1->one.yuwen,p1->one.yingyu, p1->one.aver_score, p1->one.sum_score, p1->rank);}bad = 1;}p1 = p1->next;}bad = 0;p1 = pHead->next;printf("  ┣━━━━━━┻━━━━━━━━┻━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━┫\n");printf("  ┃\t英语的平均分为:%.1f,没有达到达到平均分的学生有         ┃\n", aver_score[4]);printf("  ┣━━━━━━┳━━━━━━━━┳━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━┫\n");printf("  ┃ 学号 ┃ 姓 名  ┃性别┃高  数┃语  文┃  英 语 ┃平均分┃总  分┃名次┃\n");printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");while (p1){if (p1->one.yingyu < aver_score[4]){if (bad == 0){printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", p1->one.id,p1->name, p1->one.sex, p1->one.gaoshu, p1->one.yuwen,p1->one.yingyu, p1->one.aver_score, p1->one.sum_score, p1->rank);}else{printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", p1->one.id,p1->name, p1->one.sex, p1->one.gaoshu, p1->one.yuwen,p1->one.yingyu, p1->one.aver_score, p1->one.sum_score, p1->rank);}bad = 1;}p1 = p1->next;}printf("  ┗━━━━━━┻━━━━━━━━┻━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━┛\n");printf("\t\t\t\t\t\t该班一共%d个人!", count);}else{if (bum == 2){bad = 0;printf("\n\n  ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");printf("  ┃\t高数成绩大于90分或小于60的学生有                       ┃\n");printf("  ┣━━━━━━┳━━━━━━━━┳━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━┫\n");printf("  ┃ 学号 ┃ 姓 名  ┃性别┃高  数┃语  文┃  英 语 ┃平均分┃总  分┃名次┃\n");printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");p1 = pHead->next;while (p1){if (p1->one.gaoshu < 60 || p1->one.gaoshu >= 90){if (bad == 0){printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", p1->one.id,p1->name, p1->one.sex, p1->one.gaoshu, p1->one.yuwen,p1->one.yingyu, p1->one.aver_score, p1->one.sum_score, p1->rank);}else{printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", p1->one.id,p1->name, p1->one.sex, p1->one.gaoshu, p1->one.yuwen,p1->one.yingyu, p1->one.aver_score, p1->one.sum_score, p1->rank);}bad = 1;}p1 = p1->next;}bad = 0;printf("  ┣━━━━━━┻━━━━━━━━┻━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━┫\n");printf("  ┃\t语文成绩大于90分或小于60的学生有                       ┃\n");printf("  ┣━━━━━━┳━━━━━━━━┳━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━┫\n");printf("  ┃ 学号 ┃ 姓 名  ┃性别┃高  数┃语  文┃  英 语 ┃平均分┃总  分┃名次┃\n");printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");p1 = pHead->next;while (p1){if (p1->one.yuwen < 60 || p1->one.yuwen >= 90){if (bad == 0){printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", p1->one.id,p1->name, p1->one.sex, p1->one.gaoshu, p1->one.yuwen,p1->one.yingyu, p1->one.aver_score, p1->one.sum_score, p1->rank);}else{printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", p1->one.id,p1->name, p1->one.sex, p1->one.gaoshu, p1->one.yuwen,p1->one.yingyu, p1->one.aver_score, p1->one.sum_score, p1->rank);}bad = 1;}p1 = p1->next;}bad = 0;printf("  ┣━━━━━━┻━━━━━━━━┻━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━┫\n");printf("  ┃\t英语成绩大于90分或小于60的学生有                        ┃\n");printf("  ┣━━━━━━┳━━━━━━━━┳━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━┫\n");printf("  ┃ 学号 ┃ 姓 名  ┃性别┃高  数┃语  文┃  英 语 ┃平均分┃总  分┃名次┃\n");printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");p1 = pHead->next;while (p1){if (p1->one.yingyu < 60 || p1->one.yingyu >= 90){if (bad == 0){printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", p1->one.id,p1->name, p1->one.sex, p1->one.gaoshu, p1->one.yuwen,p1->one.yingyu, p1->one.aver_score, p1->one.sum_score, p1->rank);}else{printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", p1->one.id,p1->name, p1->one.sex, p1->one.gaoshu, p1->one.yuwen,p1->one.yingyu, p1->one.aver_score, p1->one.sum_score, p1->rank);}bad = 1;}p1 = p1->next;}printf("  ┗━━━━━━┻━━━━━━━━┻━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━┛\n");}else{if (bum == 3){return;}else{statisStudentInfo(pHead);}}}_getch();
}
/*================================================
== 函数名:int sortMenu()
== 功  能:排序方式菜单显示和选择
== 参  数:无
== 返回值:排序方式对应整型数
=================================================*/
int sortMenu()
{int bum;system("CLS");printf("\n\n\n");printf("\t\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");printf("\t\t┃                       以什么方式查询 ?                  ┃\n");printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");printf("\t\t┃                    1   按成绩的高低                      ┃\n");printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");printf("\t\t┃                    2   按学号的升次                      ┃\n");printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");printf("\t\t┃                    3   返回主菜单                        ┃\n");printf("\t\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");printf("请按键选择:");bum = (int)(_getch() - '0');system("CLS");return bum;
}
/*================================================
== 函数名:void sortList(Student *pHead)
== 功  能:数据排序,查看所有学生信息
== 参  数:链表头指针
== 返回值:无
=================================================*/
void sortList(Student* pHead)
{Student* p1, * p2;StudentDate dat;char stu_name[20];int bum, count = 0, rank;system("title 学生成绩管理系统-查看");bum = sortMenu();if (bum == 1)//按平均分高低排序{for (p1 = pHead->next; p1 != NULL; p1 = p1->next){for (p2 = p1->next; p2 != NULL; p2 = p2->next){if (p2->one.aver_score > p1->one.aver_score){dat = p2->one;rank = p2->rank;strcpy(stu_name, p2->name);p2->one = p1->one;p2->rank = p1->rank;strcpy(p2->name, p1->name);p1->one = dat;p1->rank = rank;strcpy(p1->name, stu_name);}}}}else{if (bum == 2)//按学号高低排序{for (p1 = pHead->next; p1 != NULL; p1 = p1->next){for (p2 = p1->next; p2 != NULL; p2 = p2->next){if (p2->one.id < p1->one.id){dat = p2->one;rank = p2->rank;strcpy(stu_name, p2->name);p2->one = p1->one;p2->rank = p1->rank;strcpy(p2->name, p1->name);p1->one = dat;p1->rank = rank;strcpy(p1->name, stu_name);}}}}else{if (bum == 3){return;}else{sortList(pHead);}}}printList(pHead);
}
/*================================================
== 函数名:void printList(Student *pHead)
== 功  能:链表数据打印
== 参  数:链表头指针
== 返回值:无
=================================================*/
void printList(Student* pHead)
{int count = 0;pHead = pHead->next;system("CLS");printf("\n\  ┏━━━━━━┳━━━━━━━━┳━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━┓");printf("\n  ┃ 学号 ┃ 姓 名  ┃性别┃高  数┃语  文┃ 英  语  ┃平均分┃总  分┃名次┃\n");while (pHead){printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", pHead->one.id,pHead->name, pHead->one.sex, pHead->one.gaoshu, pHead->one.yuwen,pHead->one.yingyu, pHead->one.aver_score, pHead->one.sum_score, pHead->rank);pHead = pHead->next;count++;}printf("  ┗━━━━━━┻━━━━━━━━┻━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━┛\n");printf("\t\t\t该班一共%d个人!", count);_getch();
}
/*================================================
== 函数名:void correctWord()
== 功  能:修改密码
== 参  数:无
== 返回值:无
=================================================*/
void correctWord()
{char password[20];FILE* fp;int i = 0;char c;system("title 学生成绩统计系统-修改密码");//将标题栏命名为“学生成绩统计系统”system("CLS");printf("\n\n\n\n\t\t\t请输入新的密码:");while ((c = _getch()) != 13 && i < 20){if (c == '\b' && i > 0){putchar('\b');putchar(' ');putchar('\b');i--;}else{if (isprint(c)){putchar('*');password[i] = c;i++;}}}password[i] = '\0';printf("\n\t\t\t是否将密码修改为<%s>? Y or N:", password);c = _getch();if (c == 'Y' || c == 'y'){fp = fopen("password.dat", "wb");fwrite(password, 20, 1, fp);fclose(fp);printf("\n\t\t\t修改成功!\n");}else{return;}_getch();
}
/*================================================
== 函数名:void gotoxy(int x, int y)
== 功  能:光标移动到指定位置
== 参  数:int x:列坐标int y:行坐标
== 返回值:无
=================================================*/
void gotoxy(int x, int y)//x为列坐标,y为行坐标
{COORD pos = { x, y };HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hOut, pos);
}

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. C语言之整形与变量地址

    除了我们的int unsigned int我们还有其他的整形:short短整形&#xff0c;long int长整形&#xff0c;longlong int(vc6不支持) short: 有符号的大小为-32768~32767&#xff0c;无符号的大小为0~‭65535。他的输出格式符为"%hd" short a 1;//定义一个短整形的变量a…...

    2024/5/2 10:46:01
  2. Java零基础笔记【day6】

    *数据类型 关于Java中的数据类型&#xff1a; 1.数据类型的作用是什么&#xff1f; -程序当中有很多数据&#xff0c;每一个数据都是有相关类型的&#xff0c;不同数据类型的数据占用空间大小不同。 -数据类型的作用是知道JVM在运行程序的时候给数据分配空间。 2.Java中的…...

    2024/4/19 20:05:12
  3. Maven项目搭建

    我们回顾一下maven规范的目录结构&#xff1a; 1、手动搭建Maven项目 我们先使用手动的方式来创建maven项目 &#xff08;1&#xff09;在D盘下创建目录mvnproject并进入该目录&#xff0c;作为我们的操作目录 &#xff08;2&#xff09;创建我们的maven项目&#xff0c;创建…...

    2024/4/22 17:23:05
  4. CTA-敏感行为-读取剪切板

    Android 源码 国内&#xff1a; AndroidXRef&#xff08;1.6-9.0&#xff09;AOSPXRef&#xff08;7.1-12.0&#xff09;海外&#xff1a; https://android.googlesource.com/platform/frameworks/base/ Android 文档 国内 文档&#xff1a;Documentation | Android 开发者…...

    2024/4/15 12:19:11
  5. 生成数据1.0

    生成数据。 1.模型 根据经典的多次覆盖模型&#xff0c;用来抽取cmp道集&#xff1a; 2.代码 # -*- coding: UTF-8 -*-import numpy as np import numpy as np import matplotlib.pyplot as pltclass GenData:def __init__(self,offset_of_send,offset_of_receive,S)::p…...

    2024/4/13 21:52:26
  6. CTA-敏感行为-监视剪切板

    Android 源码 国内&#xff1a; AndroidXRef&#xff08;1.6-9.0&#xff09;AOSPXRef&#xff08;7.1-12.0&#xff09;海外&#xff1a; https://android.googlesource.com/platform/frameworks/base/ Android 文档 国内 文档&#xff1a;Documentation | Android 开发者…...

    2024/4/24 6:40:16
  7. 效率倍增,推荐10个好用到爆的Jupyter Notebook插件

    大家好&#xff0c;今天我来给大家介绍几个在jupyter notebook中被广泛用到的插件&#xff0c;能够更好地帮助到大家进行数据分析与可视化&#xff0c;极大地提高日常的工作效率。 准备工作 首先我们先下载好插件选择的工具栏&#xff0c;通过pip install来进行下载即可 pip…...

    2024/4/29 21:15:50
  8. 【SpringCloud】优质文章分享

    Eureka Eureka服务下线后快速感知配置...

    2024/4/13 21:52:11
  9. 安全 / EPP 和 EDR 主要检测功能

    EDR发展路线&#xff1a; 功能项特征值特征码启发式引擎可疑程序自动释放可执行文件驻留系统目录、伪装系统文件、注册win32服务获取系统管理权限、通过命令行删除自身文件&#xff0c;调用系统组件svchost.exe来开启后门服务&#xff0c;隐藏自身进程并尝试通过OpenSCManagerA…...

    2024/4/16 11:07:22
  10. opencv图像运算(python)

    图像运算图像运算图像加法运算加号运算符cv2.add图像加权和按位逻辑运算按位与按位或按位非按位异或掩膜图像与数值的运算位平面分解图像加密和解密数字水印图像运算 图像加法运算 可以通过加号运算符“”对图像进行加法运算&#xff0c;也可以通过cv2.add()函数对图像进行加法…...

    2024/4/20 6:24:54
  11. SpringBoot开发【配置】外部配置加载顺序

    除了从内部properties文件或者yml文件配置&#xff0c;也可以从一些外部文件进行配置&#xff0c;下面就来简单说一下有哪些外部配置 SpringBoot外部配置 SpringBoot也可以从以下位置加载配置;优先级从高到低;高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置 1.…...

    2024/4/18 16:21:30
  12. (八) Linux在某个目录下递归查找特定字符串

    grep -rn “XXXX” DDDD XXXX&#xff1a;表示字符串名称 DDDD: 表示目录名...

    2024/4/7 19:07:00
  13. 准确率、召回率、F值

    作者&#xff1a;木叶 链接&#xff1a;https://www.zhihu.com/question/19645541/answer/39732647 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 准确率和召回率是广泛用于信息检索和统计学分类领域的两个度量值&a…...

    2024/4/20 8:36:32
  14. [亚麻高频题] Leetcode 907. Sum of Subarray Minimums(子数组最小值之和)

    题目描述&链接 Leetcode 907 : 给定一个数组&#xff0c;找到所有子数组最小值&#xff0c;并返回所有最小值之和 题目思路 1. 暴力枚举 直观思路就是通过暴力枚举出所有的子数组&#xff0c;并求所有子数组最小值之和&#xff0c;因为题目子数组是指连续子数组&#x…...

    2024/4/13 21:52:31
  15. GEE学习:遥感影像设置新的属性并查询

    目录一、问题描述&#xff1a;二、获取影像集并显示&#xff1a;1、分析步骤2、筛选云量最少影像并显示三、设置日期属性并查询四、学习小结&#xff1a;一、问题描述&#xff1a; GEE中&#xff0c;如何设置遥感影像的属性&#xff08;set image properties&#xff09;&…...

    2024/4/13 21:52:06
  16. 神经网络用于模式识别:螃蟹识别

    原文来于老饼|BP神经网络http://bp.bbbdata.com/teach#32 模式识别主要解决分类问题&#xff0c;由于分类问题的输出是离散的&#xff0c;而曲线拟合的输出是连续的&#xff0c;因此分类问题的解决方案会与曲线拟合问题的解决方案存在一些差异。 模式识别的输出 差异关键在于…...

    2024/4/20 2:07:16
  17. 【西瓜书笔记】6.极大似然估计与朴素贝叶斯

    6.1 贝叶斯判定准则 贝叶斯判定准则: 为最小化总体风险&#xff0c;只需在每个样本上选择那个能使条件风险R(c∣x)R(c \mid x)R(c∣x)最小的类别标记&#xff0c;即 h∗(x)arg⁡min⁡c∈YR(c∣x)h^{*}(\boldsymbol{x})\underset{c \in \mathcal{Y}}{\arg \min } R(c \mid \bol…...

    2024/4/25 2:22:56
  18. Flowable入门系列文章131 - 任务 05

    1、从任务获取变量 GET运行时/任务/ {taskId} /变量/ {变量名}&#xff1f;scope {scope} 表1.从任务获取变量 - URL参数 参数需要值描述任务id是串获取变量的任务的ID。变量名是串要获取的变量的名称。范围假串变量的范围被返回。何时local只返回任务本地变量值。何时global…...

    2024/4/7 19:06:55
  19. Pygame简易版2048小游戏:超详细解说,看完还不会可以剁手了(附完整源码)

    导语 哈喽&#xff01;大家好&#xff0c;我是栗子&#xff0c;感谢大家的支持&#xff01; 新的一天&#xff0c;新气象&#xff0c;程序猿们的日常开始敲敲敲&#xff0c;改改改——今天给大家来一款简单的小游戏&#xff01; 2048小游戏——准确的来说确实是一个简单版本的…...

    2024/4/13 21:53:27
  20. 第三十八章 SQL函数 CURTIME

    文章目录第三十八章 SQL函数 CURTIME大纲描述示例第三十八章 SQL函数 CURTIME 返回当前本地时间的标量日期/时间函数。 大纲 {fn CURTIME()} {fn CURTIME}描述 不接受任何参数。它将当前本地时间作为数据类型TIME返回。请注意&#xff0c;参数括号是可选的。CURTIME返回此时…...

    2024/4/17 12:34:30

最新文章

  1. C#(C Sharp)学习笔记_方法(Medthod)【十六】

    什么是方法&#xff1f; 在编程中&#xff0c;方法&#xff08;Method&#xff09;是一个执行特定操作的代码块。它是一种将逻辑封装起来的方式&#xff0c;使得代码更加模块化、重用性更高&#xff0c;并且易于维护。以下是方法的一些关键特性&#xff1a; 封装性&#xff1a…...

    2024/5/2 11:35:20
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 探索进程控制第一弹(进程终止、进程等待)

    文章目录 进程创建初识fork函数fork函数返回值fork常规用法fork调用失败的原因 写时拷贝进程终止进程终止是在做什么&#xff1f;进程终止的情况代码跑完&#xff0c;结果正确/不正确代码异常终止 如何终止 进程等待概述进程等待方法wait方法waitpid 进程创建 初识fork函数 在…...

    2024/5/1 13:05:31
  4. 【Java】假如把集合体系看作购物中心

    购物中心入口&#xff1a;Java集合框架 “Java集合广场”的购物中心&#xff0c;这是一个集合了各种奇特商店的地方&#xff0c;每个商店都充满了不同的宝藏&#xff08;数据结构&#xff09;。 一楼&#xff1a;基础集合区 - Collection接口 一楼是基础集合区&#xff0c;这…...

    2024/5/2 2:40:27
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/1 17:30:59
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/30 18:14:14
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/2 9:28:15
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/2 9:07:46
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57