刚刚考完试我十分的兴奋,再一想到就要过年回家了,就感觉我应该造福人类啊,所以就把我搞了接近两个星期的课设贴出来了,我是不是很好!(虽然极其的辣鸡,一个小小的课设就搞了700多行,各位小伙伴千万不要学我的,啰里八嗦的不是一个程序猿该有的素质!)
大家用windows系统的话可以像我同学一样弄清屏(让它长得跟跳转了界面一样的),然后把界面搞得好看一点,还可以搞背景颜色(Windows的系统这些比较容易,大家随便在网上搜一下就行了,本小白就不贴别人的了)
不想听废话的可以直接往后翻代码那里(长得黑不溜秋的那个)
首先我们需要一个菜单可以让用户选择功能,然后可以从菜单界面跳转到不同功能的界面来实现。
然后我们需要学生的数据,可以大概理解为学生是一个大类,学生的各项数据是这个大类下的不同元素。这个可以用结构体或者 来实现。
输入功能可以直接用scanf来实现,这样就是整个程序运行一次;也可以用文件实现,但整体比较繁琐。
排序功能,可以用冒泡排序法、选择排序法,这两个比较简单,容易上手。当然也可以尝试其他的排序方法。
统计功能就是学生数据的遍历,遍历用循环实现。然后排序、取平均值等等,这里不多赘述。
查询功能的实现也可以说是数据的遍历,在系统搜索到匹配的数据,将学生结构体的所有数据输出;如果遍历完仍然没有找到匹配的数据就给出提醒。
修改和删除没有特别大的区别,同样也是数据的遍历,只不过删除要添加一个确认的功能。
我的实现
学生数据我是用结构体来实现的。
我使用了文件,所以输入、修改、删除等对数据有改动的功能都使用了文件的输入(代码可能会有错误,毕竟我自己运行的时候不是很稳定)。文件的实现还弄了一个保存函数。
关于排序功能,我使用的是冒泡排序,然后使用了三个排序函数以实现分别对学号、姓名、各项成绩的排序,以至于这一块的代码比较繁琐。看到这篇文的朋友可以查找一些简化的方法,然后告诉我吧,我实在是不知道咋弄
我的输出功能由两个函数实现,一个是输出一个学生的信息,另一个是输出所有学生的信息,其实就是多了一个循环,但是由于本咸鱼放弃了思考,就直接用了两个来搞。
在此之外,我添加了密码功能,在进入系统时验证密码,然后可以选择修改密码,这里也是用文件实现的。
这里我把每个模块分开贴出来,但是总体就是按照这个顺序实现的。
1.学生信息结构体的建立
#include "curses.h"
#include
#include
#include
int n=0,flag,d=0;//定义全局变量n为学生总数,flag为添加学生人数,d用于判断是否为首次输入数据
struct student //定义学生信息结构体
{
char num[20]; //定义学号(可以含字母)
char name[20];
int sex;
float weight;
float height;
float BMI; //定义体重指数
int vc; //定义肺活量
int count; //定义仰卧起坐或引体向上个数
int score1;
int score2;
int score3;
int scoreAll; //定义总成绩
char level[10];//定义成绩等级
}grades[20],temp[10];//得到20个基本学生结构体(用于记录数据)以及10个即将用到的临时学生结构体
2.主界面(菜单)的实现
int pass=0;//用于判断是否已经进行了密码验证
int main() { //定义主函数
//定义在主函数之后的函数调用需要声明
void rule(void);
void find(void);
void change(void);
void delete1(void);
void input(void);
void statistic(void);
void passwords(void);
void print(void);
void save(void);
passwords();
pass=1; //执行完密码验证,使得下一次调用密码函数时使用修改密码的功能
int choices;//定义选择的功能序号
int f; //用于判断是否退出系统
rerun: //(label)用于goto的返回
printf("\t-----------------------------------\n");
printf("\t| 学生体测成绩系统 |\n");
printf("\t| 0.退出系统 |\n");
printf("\t| 1.输入学生成绩 |\n");
printf("\t| 2.查找学生成绩 |\n");
printf("\t| 3.修改学生成绩 |\n");
printf("\t| 4.删除学生成绩 |\n");
printf("\t| 5.浏览学生成绩 |\n");
printf("\t| 6.对学生信息排序 |\n");
printf("\t| 7.统计学生成绩 |\n");
printf("\t| 8.修改密码 |\n");
printf("\t-----------------------------------\n\n");
printf("请选择功能");
scanf("%d",&choices);
printf("\n");
while (choices>=0&&choices<=8) {
switch (choices) {
case 0:
printf("请确认是否要关闭系统\n");
printf("确认请输入1,否则输入0\n");
scanf("%d",&f);
if (f==1) {
printf("系统已关闭,感谢您的使用!");
exit(0);
}if (f==0) {
goto rerun;
}
case 1:
printf("执行成绩输入程序\n");
if(d==0){
printf("请输入学生人数\t");
scanf("%d",&n);
input();
save();
d=1;
break;
}
if (d==1) {
printf("请输入学生人数\t");
scanf("%d",&flag);
input();
save();
break;
}
case 2:
printf("执行查找成绩功能\n");
find();
save();
goto rerun;
break;
case 3:
printf("执行修改成绩功能\n");
change();
save();
goto rerun;
break;
case 4:
printf("执行删除成绩功能\n");
delete1();
save();
goto rerun;
break;
case 5:
printf("浏览全体学生成绩\n");
print();
goto rerun;
break;
case 6:
printf("执行成绩排序功能\n");
rule();
goto rerun;
break;
case 7:
printf("执行统计成绩功能\n");
statistic();
goto rerun;
break;
case 8:
printf("执行修改密码功能\n");
passwords();
goto rerun;
break;
default:
printf("输入错误!请重新输入\n");
goto rerun;
}
}
while (choices>8||choices<0) {
printf("Error!\n请重新输入");
scanf("%d",&choices);
}
}
3.输入函数的实现
int i,j;
void input(){ //定义输入主函数
void input1(void);
if (d==0) { //首次输入数据
for(i=1;i<=n;i++){
input1(); //调用input1来实现数据的录入
}
printf("\n输入完毕,返回系统主页\n\n");
}else if (d==1){ //添加数据
for(i=n+1;i<=n+flag;i++){
input1();
}
n=n+flag;
printf("\n输入完毕,返回系统主页\n\n");
}
}
void input1(){//定义函数,用于输入每一个数据
FILE * fp; //定义文件
fp=fopen("grades.pages","r");//以只读形式打开文件
if(fp==NULL){
printf("找不到学生信息文件!\n");
exit(0);
}
//如果文件存在,依次根据提示输入学生各项信息
while (!feof(fp)) {
printf("请输入第%d名学生的信息\n",i);
printf("学号:\t");
fscanf(fp,"%s",grades[i].num);
if (grades[i].num<=0) {
printf("数据可能错误,请再度确认\n");
fscanf(fp,"%s",grades[i].num);
}
for(j=1;j<i;j++){
if (strcmp(grades[i].num,grades[j].num)==0) {
printf("输入重复学号,请重新输入,确认是否正确\n");
fscanf(fp,"%s",grades[i].num);
break;}
}
printf("姓名:\t");
fscanf(fp,"%s",grades[i].name);
printf("性别(男生为1,女生为2):");
fscanf(fp,"%d",&grades[i].sex);
if (grades[i].sex!=1&&grades[i].sex!=2) {
printf("输入错误,请重新输入\n");
fscanf(fp,"%d",&grades[i].sex);
}
printf("身高(m):\t");
fscanf(fp,"%f",&grades[i].height);
if (grades[i].height<=0.5||grades[i].height>=2.4) {
printf("数据可能错误,请再度确认\n");
fscanf(fp,"%f",&grades[i].height);
}
printf("体重(kg):");
fscanf(fp,"%f",&grades[i].weight);
if (grades[i].weight<=30||grades[i].weight>=200) {
printf("数据可能错误,请再度确认\n");
fscanf(fp,"%f",&grades[i].weight);
}
printf("肺活量:\t");
fscanf(fp,"%d",&grades[i].vc);
if (grades[i].vc<=300||grades[i].vc>=7000) {
printf("数据可能错误,请再度确认\n");
fscanf(fp,"%d",&grades[i].vc);
}
printf("仰卧起坐或引体向上个数:\t");
fscanf(fp,"%d",&grades[i].count);
if (grades[i].count<=0||grades[i].count>=65) {
printf("数据可能错误,请再度确认\n");
fscanf(fp,"%d",&grades[i].count);
}
//对学生成绩进行计算
if (grades[i].sex==1) {
if (grades[i].vc>4800) {
grades[i].score1=100;
}else if (grades[i].vc>4180) {
grades[i].score1=80;
}else if (grades[i].vc>3100) {
grades[i].score1=60;
}else grades[i].score1=30;
if (grades[i].count>19) {
grades[i].score2=100;
}else if (grades[i].count>15) {
grades[i].score2=80;
}else if (grades[i].count>9) {
grades[i].score2=60;
}else grades[i].score2=30;
}else if (grades[i].sex==2) {
if (grades[i].vc>=3400) {
grades[i].score1=100;
}else if (grades[i].vc>3000) {
grades[i].score1=80;
}else if (grades[i].vc>2050) {
grades[i].score1=60;
}else grades[i].score1=30;
if (grades[i].count>56) {
grades[i].score2=100;
}else if (grades[i].count>52) {
grades[i].score2=80;
}else if (grades[i].count>24) {
grades[i].score2=60;
}else grades[i].score2=30;
}
grades[i].BMI=grades[i].weight/(grades[i].height*grades[i].height);
if (grades[i].BMI>=17.9&&grades[i].BMI<=23.9) {
grades[i].score3=100;
}else if (grades[i].BMI<17.9) {
grades[i].score3=80;
}else if(grades[i].BMI>=24.0&&grades[i].BMI<=27.9){
grades[i].score3=80;
}else if (grades[i].vc>27.9)
grades[i].score3=60;
grades[i].scoreAll=0.25*grades[i].score3+0.35*grades[i].score1+0.40*grades[i].score2;
if (grades[i].scoreAll>=95) {
strcpy(grades[i].level, "excellent");
}else if (grades[i].scoreAll>=80) {
strcpy(grades[i].level, "good");
}else if (grades[i].scoreAll>=60) {
strcpy(grades[i].level, "pass");
}else strcpy(grades[i].level, "fail");
}
fclose(fp);//文件使用完毕关闭文件,将数据保留,避免流失
}
4.保存学生信息到文件中
void save()//保存学生信息到文件
{
FILE *fp;
if((fp = fopen("student.txt" , "w")) == NULL )// 以可写的方式打开当前目录下的.txt
{
printf("不能打开此文件,请按任意键退出\n");
exit(1);
}
int i = 0;
while(i < n)
{
i++;
if(i < n)
fprintf(fp, "\n");
}
fclose(fp);
}
5.输出函数的实现(仅输出一个学生的成绩,用于查找)
void printone(){//定义输出一个学生信息的函数
if(grades[i].sex==1){
printf("%s\t",grades[i].num);
printf("%s\t",grades[i].name);
printf("男\t");
printf("%3.1f\t",grades[i].BMI);
printf("%d\t\t",grades[i].vc);
printf("%d\t\t",grades[i].count);
printf("/\t\t");
printf("%s\n\n",grades[i].level);
}else if(grades[i].sex==2){
printf("%s\t",grades[i].num);
printf("%s\t",grades[i].name);
printf("女\t");
printf("%3.1f\t",grades[i].BMI);
printf("%d\t\t",grades[i].vc);
printf("/\t\t");
printf("%d\t",grades[i].count);
printf("%s\n\n",grades[i].level);
}
}
6.查找函数的实现
void find() //定义查找函数
{
int i,trigger;
char name[10];
char num[20];
char level[10];
int chack;
int choices;
void print1(void);
refind:
chack=0;//判断学生是否存在
printf("\t请输入查询类型:1.姓名 2.学号 3.成绩等级");
scanf("%d",&choices);
if (choices==1) {
printf("\t请输入要查询的学生姓名:");
scanf("%s",name);
for (i=1; i<=n; i++) {
if(strcmp(grades[i].name,name)==0)//如果查询的学生信息存在
{
printf("学号 姓名 性别 BMI 肺活量 引体向上 仰卧起坐 最终成绩\n");
printone();
chack=1;
break;
}
}
}else if (choices==2){
printf("\t请输入要查询的学生学号:");
scanf("%s",num);
for (i=1; i<=n; i++) {
if(strcmp(num,grades[i].num)==0)
{
printf("学号 姓名 性别 BMI 肺活量 引体向上 仰卧起坐 最终成绩\n");
printone();
chack=1;
break;
}
}
}else if (choices==3){
printf("\t请输入要查询的最终成绩等级:");
scanf("%s",level);
for (i=1; i<=n; i++) {
if(strcmp(level, grades[i].level)==0)
{
printf("学号 姓名 性别 BMI 肺活量 引体向上 仰卧起坐 最终成绩\n");
printone();
chack=1;
break;
}
}
}
if(chack==0) printf("\t所查找学生不存在\n");
printf("\t继续查询请输入1,否则请输入0退出查找");
scanf("%d",&trigger);
printf("\n");
if(trigger==1)
goto refind;//利用goto实现返回
}
7.修改函数的实现
void change()
{
FILE * fp;
fp=fopen("grades.txt","r");
if(fp==NULL){
printf("找不到学生信息文件!\n");
exit(0);
}
while (!feof(fp)) {
int i,triggerc=1;
int k;
char num[20];
int chack=0;
while (triggerc==1) {
printf("\t请输入要修改成绩的学生学号:");
scanf("%s",num);
for (i=1; i<=n; i++) {
if(strcmp(num,grades[i].num)==0){
printf("请选择希望修改的内容\n");
printf("1.姓名 2.性别 3.身高 4.体重\n5.肺活量 6.仰卧起坐或引体向上\n");
scanf("%d",&k);
printf("\n请输入该生修改后的信息\n");
switch (k) {
case 1:
scanf("%s",grades[i].name);
printf("修改成功!\n");
break;
case 2:
scanf("%d",&grades[i].sex);
printf("修改成功!\n");
break;
case 3:
scanf("%f",&grades[i].height);
printf("修改成功!\n");
break;
case 4:
scanf("%f",&grades[i].weight);
printf("修改成功!\n");
break;
case 5:
scanf("%d",&grades[i].vc);
printf("修改成功!\n");
break;
case 6:
scanf("%d",&grades[i].count);
printf("\t修改成功!\n");
break;
default:
chack=1;//信息不存在则改变chack的值
break;
}
}
}
if (chack==1)
{ printf("\t不存在该生信息\n");}
printf("\t继续修改请输入1,否则请输入0退出修改\n");
scanf("%d",&triggerc);
if (triggerc==0) break;
}
}
}
8.密码函数的实现
void passwords()
{ FILE*p;//定义密码文件指针
p=fopen("password.pages", "a+");
if(p!=NULL){
char password[10]={0};
char pass1[10],pass2[10],pass3[10];
char passfinal[10];
fgets(passfinal,10, p);
int i;
if(pass==0){
printf("请输入密码:\n");
for(i = 0;i < 3;i++)
{
scanf("%s",password);
if(strcmp(password,passfinal) == 0)
break;
else printf("密码错误,请重新输入密码:\n");
}
if(i == 3){
printf("输入错误密码超过上限,退出系统\n");
exit(0);
}else{
printf("登录成功!\n");
printf("\n");
}
}else if(pass==1){
printf("请输入原密码\n");
scanf("%s",pass1);
repass:
if (strcmp(pass1,passfinal)==0) {
printf("密码正确,请输入新密码\n");
scanf("%s",pass2);
printf("请确认密码\n");
scanf("%s",pass3);
if (strcmp(pass2, pass3)==0) {
printf("密码修改成功,返回主程序\n");
strcpy(passfinal, pass2);
fclose(p);
return;
}else printf("输入两次新密码不相同,");
}else {
printf("密码错误,请重新输入\n");
scanf("%s",pass1);
if (strcmp(pass1,passfinal)==0) {
goto repass;
}else printf("密码连续2次输入错误,退出修改密码程序\n");
}
}
}else if(p==NULL){
printf("找不到密码文件!\n");
}
fclose(p);
}
9.删除功能
void delete1()
{
int i,j,tai,re;
char num[20];
redelete:
printf("请输入要删除的学生的学号:\n");
scanf("%s",num);
printf("请确认是否删除,是请输入1,否则输入0返回主界面\n");
scanf("%d",&re);
if(re==1){
for(i=1;i<=n;i++){
if(strcmp(num,grades[i].num)==0)
break;
}
if(i==n+1)//循环正常完成,没有中途跳出
{
printf("该学生不存在\n");
printf("继续删除请输入1,退出请输入0\n");
scanf("%d",&tai);
if(tai==0)
return;
if (tai==1) {
goto redelete;//再次进行该功能的实现
}
}
for(j=i;j<=n;j++)//在被删除的同学后,将后一名学生的信息给前一名学生
{strcpy(grades[j].name, grades[j+1].name);
strcpy(grades[j].num,grades[j+1].num);
grades[j].sex=grades[j+1].sex;
grades[j].height = grades[j+1].height;
grades[j].weight = grades[j+1].weight;
grades[j].vc = grades[j+1].vc;
grades[j].count = grades[j+1].count;
strcpy(grades[j].level,grades[j+1].level);
}
printf("删除成功!\n");
}else if (re==0)
return;
}
10.排序功能
void paixu(int i){//替换(就是懒得再写辣么多次,就单独搞了个函数)
struct student t;
t=grades[i];
grades[i]=grades[i+1];
grades[i+1]=t;
}
void compare(int k)//学号、姓名、总成绩的排序函数
{
int i,j;
for(j=1;j<=n;j++){
for(i=1;i<n-j;i++){
if (k==1) {
if(strcmp(grades[i].name,grades[i+1].name)>0)
paixu(i);
}else if (k==2){
if(strcmp(grades[i].num,grades[i+1].num)>0)
paixu(i);
}else if (k==3){
if(grades[i].scoreAll<grades[i+1].scoreAll)
paixu(i);
}
}
}
}
int sex;
void cmpsco(int m)//单项成绩的排序函数
{
int i,j;
for(j=1;j<=n;j++){
for(i=1;i<n-j;i++){
switch (m) {
case 1: //按身高排序
if(grades[i].height<grades[i+1].height){
paixu(i);
}
break;
case 2: //按体重排序
if(grades[i].weight<grades[i+1].weight){
paixu(i);
}
break;
case 3: //按体重指数排序
if(grades[i].BMI<grades[i+1].BMI){
paixu(i);
}
break;
case 4: //按肺活量排序
if(grades[i].vc<grades[i+1].vc){
paixu(i);
}
break;
default:
break;
}
}
}
}
void cmpscor(int m){ //引体向上或仰卧起坐的排序
struct student t;
int k=0;
if (m==5) { //按引体向上排序
for(i=1;i<=n;i++){
if(grades[i].sex==1){
temp[k]=grades[i]; //得到仅有男生的结构体temp
k++;
}
}
}else if (m==6){
for(i=1;i<=n;i++){
if(grades[i].sex==2){
temp[k]=grades[i]; //得到仅有女生的结构体temp
k++;
}
}
}
sex=k;
k=1;
for(j=1;j<=sex-1;j++){
for(i=1;i<sex-1-j;i++){
if(temp[i].count<temp[i+1].count){
t=temp[i];
temp[i]=temp[i+1];
temp[i+1]=t;
}
}
}
}
void printsex(int m){ //排序时对男女生分别的输出
printf("学号 姓名 性别 BMI 肺活量 引体向上 仰卧起坐 最终成绩\n");
if(m==5){
for (int i=1; i<=sex-1; i++) {
printf("%s\t",temp[i].num);
printf("%s\t",temp[i].name);
printf("男\t");
printf("%3.1f\t",temp[i].BMI);
printf("%d\t\t",temp[i].vc);
printf("%d\t\t",temp[i].count);
printf("/\t\t");
printf("%s\n\n",temp[i].level);
}
}else if(m==6){
for (int i=1; i<=sex-1; i++) {
printf("%s\t",temp[i].num);
printf("%s\t",temp[i].name);
printf("女\t");
printf("%3.1f\t",temp[i].BMI);
printf("%d\t\t",temp[i].vc);
printf("/\t\t");
printf("%d\t\t",temp[i].count);
printf("%s\n\n",temp[i].level);
}
}
}
void print(){ //学生整体信息的输出
printf("学号 姓名 性别 BMI 肺活量 引体向上 仰卧起坐 最终成绩\n");
for(int i = 1;i <= n ;i++)
{ printone();}
printf("\n");
}
void rule()//排序主函数
{
int k,m;
printf("请输入排序任务方式(学号与成绩为升序排列,成绩为降序排列):\n");
printf("0、退出\n");
printf("1、学号\n");
printf("2、姓名\n");
printf("3、总成绩\n");
printf("4、单项成绩 \n");
rerule:
scanf("%d",&k);
if (k==0) {
}else if (k>0&&k<4) {
compare(k);
print();
}else if(k==4){
printf("请选择需要排序的成绩类型\n");
printf("1.身高 2.体重 3.BMI 4.肺活量 5.仰卧起坐 6.引体向上\n");
scanf("%d",&m);
if (m>0&&m<5) {
cmpsco(m);
print();
}
if (m==5||m==6)
{ cmpscor(m);
printsex(m);
}
}else{
printf("请输入正确的选择\n");
goto rerule;
}
}
11.统计功能
void statistic()
{
//总成绩在不同分数段的男女生数量,各种指数的最大值最小值平均值
int i,m;
int vca,vcx = 0.0,vcn = 0.0;//定义肺活量的平均值,最大值,最小值
float ba,bx = 0.0,bn = 0.0;//体重指数
float pa = 0.0,px = 0.0,pn = 0.0;
float sa,sx = 0.0,sn = 0.0;
float pt = 0.0,st = 0.0;//定义总值
int vct = 0;
int n1=0,n2=0;
double bt = 0.0;
int e1=0,e2=0;//e1为男生excellent,e2为女生excellent……
int g1=0,g2=0;
int p1=0,p2=0;
int f1=0,f2=0;
for (i=1; i<=n; i++) {
if(strcmp(grades[i].level,"excellent")==0){
if (grades[i].sex==1) e1++;
if (grades[i].sex==2) e2++;
}else if(strcmp(grades[i].level,"good")==0){
if (grades[i].sex==1) g1++;
if (grades[i].sex==2) g2++;
}else if(strcmp(grades[i].level,"pass")==0){
if (grades[i].sex==1) p1++;
if (grades[i].sex==2) p2++;
}else if(strcmp(grades[i].level,"fail")==0){
if (grades[i].sex==1) f1++;
if (grades[i].sex==2) f2++;
}
}
for (i=1; i<=n; i++) {
vct=vct+grades[i].vc;
bt=bt+grades[i].BMI;
if (grades[i].sex==1) {
pt=pt+grades[i].count;
n1++;
}else if (grades[i].sex==2) {
st=st+grades[i].count;
n2++;
}
}
vca=vct/n;
ba=bt/n;
pa=pt/n1;
sa=st/n2;
for (m=3; m<=6; m++) {
cmpsco(m);//对学生信息根据非仰卧起坐单项成绩排序
cmpscor(m);//对学生信息根据仰卧起坐或引体向上排序
//每一次排序完第一项和最后一项分别为最大值和最小值
if (m==3) {
bn=grades[1].BMI;
bx=grades[n].BMI;
}else if (m==4){
vcx=grades[1].vc;
vcn=grades[n].vc;
}else if (m==5){
px=temp[1].count;
pn=temp[sex-1].count;
}else if (m==6){
sx=temp[1].count;
sn=temp[sex-1].count;
}
}
printf("\t成绩/性别 男 女\n");
printf("\texcellent: %d %d\n",e1,e2);
printf("\tgood: %d %d\n",g1,g2);
printf("\tpass: %d %d\n",p1,p2);
printf("\tfail: %d %d\n\n",f1,f2);
printf("所有学生成绩统计\n");
printf("\t数据/项目 体重指数 肺活量 引体向上 仰卧起坐\n");
printf("\t平均值 %3.1f %6d %3.1f %4.1f\n",ba,vca,pa,sa);
printf("\t最大值 %3.1f %6d %3.1f %4.1f\n",bx,vcx,px,sx);
printf("\t最小值 %3.1f %6d %3.1f %4.1f\n\n",bn,vcn,pn,sn);
}
1.使用switch-case来实现选择,要注意每个case完结要加break。case只是一个label,没有特殊的识别作用,系统不会因为函数运行到下一个case了就自动跳出,当然这样的话可以实现相邻的几个case实现相同的语句而不重复。case后的东西和switch里的东西长得一样就跳到这个case,所以case也没有特别的顺序要求。
2.进行运算要注意数据类型。int/int=int,不能用float或其他来定义,不要问我怎么知道的。
3.搞这种不能二三十行代码就能搞定的东西,定义的变量、函数名就不要那么模棱两可,不要图方便就搞a、b、c…不然你自己可能过一段时间就忘记自己本来写的是啥了