【迁移自人人网】我在生存挑战赛中用到的电脑答题系统的源代码以及最终版软件
有史以来我写代码速度最快的一个。。。。一共用了三天时间。在这三天时间中,我大约拿出了20多个小时专门用来编写这个软件。在编写这个软件的过程中,我收获颇多。 我估计我的收获比编写3qfetion还要大很多。因为在编写的过程中遇见了各种各样的问题。最终都得到了很好的解决。。。我喜欢这种不断挑战自己的东西。。。。
每天晚上都是在3点半之后才开始睡觉,最终写成了这个看起来非常不爽的代码(因为苦于没有时间,没有加注释。)
参加过生存挑战赛的面试的同学也可以了解一下这个
现成的下载地址: http://sti.hust.edu.cn/uploadfile/qsb/testi-l1.2.exe
如果想测试一下自己是不是具备必要的野外生存能力,也可以试一下
主要功能就是实现答题、评分、备份、存储答题资料、汇总成绩以及相关的查看功能的实现。
如果用普通的三位数号码登陆,则进入一般的答题状态。如果用aaa登陆,则进入测试状态,不影响正常的答题以及成绩记录。如果用000登陆,则可以进入管理页面。
关于密码的问题。。。普通密码是 1949 管理密码是 111
下面就是这个程序的源代码,欢迎从里面挑骨头,如果您有足够的时间的话。
#include <dos.h>
#include <io.h>
#include <stdlib.h>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<time.h>
#include<ctype.h>
int ReadQuestion(void);
int yanzhengkaohao(void);
void WriteDat(void);
char lajiqingli(void);
char xx[50][400];
int maxline;
int dakaidat(void);
int shifoubaocun(void);
int tishu=0;
int result=0;
char ans;
char attend[40];
char datijilu[50];
char f[50];
char kaohao[5];
char kaohao2[5];
int choice;
int mima;
char resultc[6];
char c[50][100];
char kh[50][100];
char s2;
int kaohaot;
void main()
{
int i,j;
char chakanchengji[50];
char datijilu2[50];
char datijilu3[50];
aaa:system(“:start”);
system(“mode con cols=80 lines=25”);
system(“color f0”);
srand(time(NULL));
system(“cls”);
system(“title 欢迎参加生存挑战赛的生存知识竞赛环节”);
printf(“\n\t\t********欢迎进入生存挑战赛答题系统**********\n\n\n\n”);
printf(“请输入您的比赛号码(即面试官告诉您的三位数的号码)\n回车键确认:\n”);
gets(kaohao);
sprintf(f,”start D:\\testi\\pro\\findattend.bat %s”,kaohao); //利用sprintf函数解决那个很棘手的问题
system(f);
system(“cls”);
if (strcmp(kaohao,”000″)==0)
{
system(“color 30”);
system(“cls”);
printf(“\n\t\t********欢迎进入生存挑战赛管理系统**********\n\n\n\n”);
printf(“请输入您的管理密码:\n”);
scanf(“%d”,&mima);
if (mima!=111)
{
printf(“\a”);
goto aaa;
}
else
{
system(“color 30”);
guanli:system(“cls”);
printf(“\n\t\t********欢迎进入生存挑战赛管理系统**********\n\n\n\n”);
printf(“请输入您的要求:\n1.查看指定的考试题目\n2.查看指定人员的回答情况\n3.查看指定人员的成绩是否存在\n4.查看某一题目的答案\n5.查看所有的参赛队员的成绩\n”);
printf(“6.查看所有队员的回答信息(不建议看)\n7.查看所有的问题的答案\n8.返回主页面\n”);
scanf(“%d”,&i);
if (i==1)
{
system(“color 30”);
system(“cls”);
printf(“\n\t\t********欢迎进入生存挑战赛管理系统**********\n\n\n\n”);
printf(“请输入您的需要查看的题目\n”);
scanf(“%d”,&j);
j=j-1;
datijilu3[0]=j/10+’0′;
datijilu3[1]=j%10+’0′;
datijilu3[2]=’\0′;
sprintf(datijilu,”more<D:\\testi\\question\\%s.txt”,datijilu3);
system(“pause”);
system(“cls”);
printf(“\n\t\t********欢迎进入生存挑战赛管理系统**********\n\n\n\n”);
system(datijilu);
system(“pause”);
goto guanli;
}
if (i==2)
{
system(“color 30”);
system(“cls”);
printf(“\n\t\t********欢迎进入生存挑战赛管理系统**********\n\n\n\n”);
printf(“请输入您的需要查看的参赛队员号码\n”);
scanf(“%d”,&j);
datijilu3[0]=j/100+’0′;
datijilu3[1]=j/10-j/100*10+’0′;
datijilu3[2]=j%10+’0′;
datijilu3[3]=’\0′;
sprintf(datijilu,”more<D:\\testi\\data\\single\\%s.txt”,datijilu3);
system(“pause”);
system(“color 30”);
system(“cls”);
printf(“\n\t\t********欢迎进入生存挑战赛管理系统**********\n\n\n\n”);
system(datijilu);
system(“pause”);
goto guanli;
}
if (i==3)
{
system(“color 30”);
system(“cls”);
printf(“\n\t\t********欢迎进入生存挑战赛管理系统**********\n\n\n\n”);
printf(“请输入考号:\n”);
scanf(“%d”,&kaohaot);
kaohao2[0]=kaohaot/100+’0′;
kaohao2[1]=kaohaot/10-kaohaot/100*10+’0′;
kaohao2[2]=kaohaot%10+’0′;
sprintf(chakanchengji,”start D:\\testi\\pro\\findchengji.bat %s”,kaohao2); //利用sprintf函数解决那个很棘手的问题
system(chakanchengji);
system(“more<D:\\testi\\result\\danyichengji.tmp”);
system(“pause”);
goto guanli;
}
if (i==4)
{
system(“color 30”);
system(“cls”);
printf(“\n\t\t********欢迎进入生存挑战赛管理系统**********\n\n\n\n”);
printf(“请输入您的需要查看的题目\n”);
scanf(“%d”,&j);
j=j-1;
datijilu3[0]=j/10+’0′;
datijilu3[1]=j%10+’0′;
datijilu3[2]=’\0′;
sprintf(f,”start D:\\testi\\pro\\findkey.bat %s”,datijilu3);
system(f);
lajiqingli();
sprintf(datijilu,”echo 正确答案应该是%c”,lajiqingli());
system(datijilu);
system(“pause”);
goto guanli;
}
if (i==5)
{
system(“color 30”);
system(“cls”);
printf(“\n\t\t********欢迎进入生存挑战赛管理系统**********\n\n\n\n”);
system(“more<D:\\testi\\result\\chengji.dat”);
system(“pause”);
goto guanli;
}
if (i==6)
{
system(“color 30”);
system(“cls”);
printf(“\n\t\t********欢迎进入生存挑战赛管理系统**********\n\n\n\n”);
system(“more<D:\\testi\\data\\datijilu.txt”);
system(“pause”);
goto guanli;
}
if (i==8)
{
goto aaa;
}
if (i==7)
{
system(“color 30”);
system(“cls”);
printf(“\n\t\t********欢迎进入生存挑战赛管理系统**********\n\n\n\n”);
system(“more<D:\\testi\\key\\key.txt”);
system(“pause”);
goto guanli;
}
}
}
system(“color f0”);
printf(“\n\t\t********欢迎进入生存挑战赛答题系统**********\n\n\n\n”);
printf(“下面的是您的相关信息:\n”);
system(“type D:\\testi\\data\\now.dat”);
system(“pause”);
system(“cls”);
printf(“\n\t\t********欢迎进入生存挑战赛答题系统**********\n\n\n\n”);
printf(“是不是正确的?如果不正确,按Q返回,并联系大赛主办方!!\n如果你是面试官,想更加具体的了解这个程序,请按W\n如果没有问题,按其他键继续\n”);
s2=getch();
if (s2==’q’||s2==’Q’)
{
goto aaa;
}
if (s2==’w’||s2==’W’)
{
system(“cls”);
printf(“\n\t\t********欢迎进入生存挑战赛答题系统**********\n\n\n\n”);
printf(“请输入管理密码:\n”);
scanf(“%d”,&mima);
if (mima!=111) goto aaa;
printf(“除了管理密码之外,其他的所有密码都是1949\n”);
printf(“如果遇见问题,先确认一下是不是文件都已经保存了\n”);
printf(“遇见因为私自操作而引起的报警的现象,请给与警告处分\n”);
printf(“在所有的人员都进行的差不多的时候,请选择备份文件之后再关掉计算机\n”);
printf(“本分之后请注意其实所谓的成绩文件就是在E盘中的成绩记录表.dat\n”);
system(“pause”);
}
{
sprintf(datijilu,”start D:\\testi\\pro\\ifexist.bat %s”,kaohao);
system(datijilu);
system(“echo temp>D:\\testi\\data\\single\\temp.tmp”);
if (yanzhengkaohao())
{
printf(“在验证考号是不是正确的时候发生了错误。请联系主考官。\n”);
}
if (kh[0][2]!=’0′)
{
cunzaile:system(“cls”);
printf(“\n\t\t********欢迎进入生存挑战赛答题系统**********\n\n\n\n”);
printf(“很抱歉,您已经参加过考核了。或者您的输入有误。\n”);
printf(“请输入密码,输入正确之后返回\n”);
printf(“\a”);
mima=0;
scanf(“%d”,&mima);
if (mima==1949)
{
kaohao[0]=’\0′;
goto aaa;
}
else printf(“\a”);
goto cunzaile;
}
}
/* {
sprintf(datijilu,”if exist D:\\testi\\data\\single\\%s.txt goto s1″,kaohao);
system(datijilu);
sprintf(datijilu,”if not exist D:\\testi\\data\\single\\%s.txt goto s2″,kaohao);
system(datijilu);
system(“:s1”);
printf(“\a”);
system(“cls”);
printf(“\n\t\t********欢迎进入生存挑战赛答题系统**********\n\n\n\n”);
system(“echo 您已经回答过一次题目了,请找面试官处理!”);
system(“goto s1”);
system(“:s2”);
system(“echo 您还没有参与过答题,您可以继续答题了”);
system(“pause”);
}
*/
/* {
FILE *fp;
int i=0;
char *p;
sprintf(datijilu,”D:\\testi\\data\\single\\%s.txt”,kaohao);
if((fp=fopen(datijilu,”r”))!=NULL)
{
system(“cls”);
printf(“\n\t\t********欢迎进入生存挑战赛答题系统**********\n\n\n\n”);
printf(“对不起,您已经答题了!\n”);
printf(“\a”);
mimacuowu:printf(“请输入密码,输入正确后方可继续答题:\n”);
mima=0;
scanf(“%d”,&mima);
if (mima==1949)
{
goto aaa;
}
else
{
printf(“\a”);
goto mimacuowu;
}
}
fclose(fp);
}
*/
system(“cls”);
system(“color ec”);
printf(“\n\t\t********欢迎进入生存挑战赛答题系统**********\n\n\n\n”);
printf(“参加答题者注意事项:\n\n\n”);
printf(“\t1.本系统制作时间仓促,如果有任何问题,请及时联系面试官,以防止意外损失\n\n”);
printf(“\t2.如果对本考试系统有任何疑问,欢迎提出质疑。\n\n\t\t因为您的每一步操作我们都有记录,所以如果有问题可以很方便的查找。\n\n”);
printf(“\t3.如果面试后对自己的成绩有任何疑问,欢迎您在所有面试结束\n\n\t\t之后(大约10月28号)”);
printf(“发邮件至xxx,告诉我们你的比赛号码\n\n\t\t我们将把你的所回答的题目、你的回答以及正确答案都回复给你,\n\n\t\t所以请您放心我们的公平性\n\n”);
printf(“\t4.已经作答的题无法反悔,所以请您在选择之前,一定要加倍小心加倍仔细认真\n\n\n”);
system(“pause”);
system(“cls”);
srand(time(NULL));
system(“title 欢迎参加生存挑战赛的生存知识竞赛”);
system(“color f0”);
while(tishu<10)
{
if(ReadQuestion())
{
system(“cls”);
printf(“\n\t\t********生存挑战赛答题系统错误提示**********\n\n\n\n”);
printf(“试卷文件不能打开!请迅速联系旁边的面试官\n请他们来处理以免耽误大事!\n”);/*便于在不能打开出现意外的时候排查错误*/
printf(“\a”);
}
ans=getch();
ans=toupper(ans);
if (strcmp(“aaa”,kaohao))
{
sprintf(datijilu,”echo 你的答案是%c>>D:\\testi\\data\\datijilu.txt”,ans);
system(datijilu);
{
sprintf(datijilu,”echo 你的答案是%c>>D:\\testi\\data\\single\\”,ans);
sprintf(datijilu2,”%s.txt”,kaohao);
strcat(datijilu,datijilu2);
system(datijilu);
}
}
if (strcmp(“aaa”,kaohao))
{
sprintf(datijilu,”echo 正确答案应该是%c>>D:\\testi\\data\\datijilu.txt”,lajiqingli());
system(datijilu);
{
sprintf(datijilu,”echo 正确答案应该是%c>>D:\\testi\\data\\single\\”,lajiqingli());
sprintf(datijilu2,”%s.txt”,kaohao);
strcat(datijilu,datijilu2);
system(datijilu);
}
}
tishu++;
if (ans==lajiqingli())
{
result+=2;
}
/* system(“cls”);
printf(“\n\t\t********欢迎进入生存挑战赛答题系统**********\n\n\n\n”);
system(“echo 请按任意键开始作答下一题:”);
system(“pause”);
*/
}
system(“cls”);
printf(“\n\t\t********欢迎进入生存挑战赛答题系统**********\n\n\n\n”);
printf(“恭喜你,所有题目都已经作答完毕!\n退出时请不要点击右上角的关闭按钮,否则有可能导致成绩无效\n请按任意键开始保存您的作答成绩,”);
system(“pause”);
if (strcmp(“aaa”,kaohao))
{
system(“echo *******************************************************************>>D:\\testi\\data\\datijilu.txt”);
system(“echo **************************此人作答完毕*****************************>>D:\\testi\\data\\datijilu.txt”);
system(“echo *******************************************************************>>D:\\testi\\data\\datijilu.txt”);
system(“echo **********************下面开始另一个人的回答***********************>>D:\\testi\\data\\datijilu.txt”);
}
if(result<=2)
{
printf(“经鉴定,您的分数不足2分。这极有可能是因为本系统的错误导致的。\n如果出现了本画面,请及时联系大赛主办方!\n主办方会让你选作纸质题目\n”);
printf(“\a”);
system(“pause”);
}
if (strcmp(“aaa”,kaohao))
{
sprintf(datijilu,”echo 【%s】>>D:\\testi\\result\\chengji.dat”,kaohao);
system(datijilu);
resultc[0]=result/10+’0′;
resultc[1]=result%10+’0′;
sprintf(datijilu,”echo %s>>D:\\testi\\result\\chengji.dat”,resultc);
system(datijilu);
}
aa:system(“cls”);
printf(“\n\t\t********欢迎进入生存挑战赛答题系统**********\n\n\n\n”);
printf(“请您选择相应的功能!\n”);
printf(“1.保存文件并安全退出系统\n”);
printf(“2.查看成绩(参赛队员请勿选)\n”);
printf(“3.查看是否保存(不建议参赛队员选择)\n”);
printf(“4.一键备份所有资料(不建议参赛队员选择项,\n\t\t正常退出就已经备份了。本功能为二次备份)\n”);
printf(“5.故障简易修理\n”);
choice=getchar();
if (choice==’2′)
{
system(“cls”);
printf(“\n\t\t********欢迎进入生存挑战赛成绩查看系统**********\n\n\n\n”);
printf(“请输入密码:\n”);
scanf(“%d”,&mima);
if (mima==1949)
{
system(“cls”);
printf(“\n\t\t********欢迎进入生存挑战赛成绩查看系统**********\n\n\n\n”);
printf(“您的成绩为 %d,成绩已经被记录”,result);
system(“pause”);
goto aa;
}
else
{
printf(“\a\a\a\a\a”);
goto aa;
}
}
else if (choice==’3′)
{
system(“cls”);
printf(“\n\t\t********欢迎进入生存挑战赛成绩查看系统**********\n\n\n\n”);
{
sprintf(chakanchengji,”start D:\\testi\\pro\\findchengji.bat %s”,kaohao); //利用sprintf函数解决那个很棘手的问题
system(chakanchengji);
if (shifoubaocun())
{
printf(“\a”);
printf(“在查看成绩是否保存的时候文件打开出错了,请找工作人员联系!”);
}
if (isdigit(c[2][2]))
{
printf(“恭喜您,您已经成功保存成绩了!\n”);
}
else if (!isdigit(c[2][2]))
{
printf(“如果您看到了此画面,说明您的成绩还没有被保存,系统发生了\n故障,如果重试后还是有问题,请及时联系主办方!\n”);
}
else
{
printf(“系统其他故障!\n”);
printf(“\a”);
}
system(“pause”);
goto aa;
}
goto aa;
}
else if (choice==’4′)
{
system(“cls”);
printf(“\n\t\t********欢迎进入生存挑战赛数据备份系统**********\n\n\n\n”);
system(“@copy D:\\testi\\data\\datijilu.txt e:\\所有同学的答题记录.dat”);
system(“cls”);
printf(“\n\t\t********欢迎进入生存挑战赛数据备份系统**********\n\n\n\n”);
system(“@copy D:\\testi\\result\\chengji.dat e:\\成绩记录表.dat”);
system(“cls”);
system(“md e:\\single”);
system(“@copy /y D:\\testi\\data\\single e:\\single\\”);
system(“cls”);
printf(“\n\t\t********欢迎进入生存挑战赛数据备份系统**********\n\n\n\n”);
printf(“经常选择这个项目可以有效的防止因为误操作导致的数据文件\n被删除等恶性情况的发生\n”);
system(“if exist e:\\成绩记录表.dat echo 数据文件一(成绩记录表)备份成功!”);
system(“if not exist e:\\成绩记录表.dat echo 数据文件一(成绩记录表)备份失败!”);
system(“if exist e:\\所有同学的答题记录.dat echo 数据文件二(所有同学答题记录)备份成功!”);
system(“if not exist e:\\所有同学的答题记录.dat echo 数据文件二(所有同学答题记录)备份失败!”);
system(“if exist e:\\single\\*.txt echo 数据文件三(单独文件)备份成功!”);
system(“if not exist e:\\single\\*.txt echo 数据文件三(单独文件)备份失败!”);
system(“pause”);
goto aa;
}
else if (choice==’5′)
{
printf(“”);
}
else if (choice==’1′)
{
system(“cls”);
printf(“\n\t\t********正在退出生存挑战赛答题系统**********\n\n\n\n”);
system(“if exist D:\\testi\\data\\single\\AAA.txt del /f /s /q D:\\testi\\data\\single\\AAA.txt”);
system(“if exist E:\\single\\AAA.txt del /f /s /q E:\\single\\AAA.txt”);
system(“if exist d:\\生存挑战赛备份资料\\所有同学的答题记录.dat md d:\\生存挑战赛备份资料”);
system(“cls”);
system(“@copy D:\\testi\\data\\datijilu.txt d:\\生存挑战赛备份资料\\所有同学的答题记录.dat”);
system(“cls”);
system(“@copy D:\\testi\\result\\chengji.dat d:\\生存挑战赛备份资料\\成绩记录表.dat”);
i=655;
while(i>0)
{
if (i%100==25)
{
system(“cls”);
printf(“\n\t\t||||||||正在退出生存挑战赛答题系统||||||||||\n\n\n\n\n\n\n\n\n\n\n”);
}
if (i%100==50)
{
system(“cls”);
printf(“\n\t\t////////正在退出生存挑战赛答题系统//////////\n\n\n\n\n\n\n\n\n\n”);
}
if (i%100==75)
{
system(“cls”);
printf(“\n\t\t——–正在退出生存挑战赛答题系统———-\n\n\n\n\n\n\n\n\n\n”);
}
if (i%100==0)
{
system(“cls”);
printf(“\n\t\t\\\\\\\\\\\\\\\\正在退出生存挑战赛答题系统\\\\\\\\\\\\\\\\\\\\\n\n\n\n\n\n\n\n\n\n“);
}
i–;
/* if(i/100==6)
{
printf(“\t\t\t13%%已保存”);
}
if(i/100==5)
{
printf(“\t\t\t28%%已保存”);
}
if(i/100==4)
{
printf(“\t\t\t35%%已保存”);
}
if(i/100==3)
{
printf(“\t\t\t56%%已保存”);
}
if(i/100==2)
{
printf(“\t\t\t78%%已保存”);
}
if(i/100==1)
{
printf(“\t\t\t88%%已保存”);
}
if(i/100==0)
{
printf(“\t\t\t100%%已保存”);
}
*/
}
}
else
{
system(“cls”);
printf(“\n\t\t********正在准备退出生存挑战赛答题系统**********\n\n\n\n”);
printf(“您刚才的键入有误,请重新选择!按任意键返回!”);
getch();
goto aa;
}
}
int ReadQuestion()/*读取数据文件函数*/
{
int i,filename;
char a[30]=”D:\\testi\\question\\00.txt”;
char shiti[50];
char dujieguo[50];
char datijilu[50];
char datijilu2[50];
srand(time(NULL));
i=rand();
filename=i%59;
for (i=0;i<50;i++)
{
datijilu[i]=’\0′;
}
sprintf(dujieguo,”start D:\\testi\\pro\\findkey.bat %d”,filename);
system(dujieguo);
lajiqingli();
for (i=0;i<50;i++)
{
datijilu[i]=’\0′;
}
{
sprintf(datijilu,”echo 【%s】>>D:\\testi\\data\\datijilu.txt”,kaohao);
system(datijilu);
{
sprintf(datijilu,”echo 【%s】>>D:\\testi\\data\\single\\”,kaohao);//让每个同学的回答的记录记在单独的一个文档中
sprintf(datijilu2,”%s.txt”,kaohao);
strcat(datijilu,datijilu2);
system(datijilu);
}
sprintf(datijilu,”echo %d>>D:\\testi\\data\\datijilu.txt”,filename);
system(datijilu);
{
sprintf(datijilu,”echo %d>>D:\\testi\\data\\single\\”,filename);//让每个同学的回答的记录记在单独的一个文档中
sprintf(datijilu2,”%s.txt”,kaohao);
strcat(datijilu,datijilu2);
system(datijilu);
}
}
{
a[18]=filename/10+’0′;
a[19]=filename%10+’0′;
sprintf(datijilu,”type %s>>D:\\testi\\data\\datijilu.txt”,a);
system(datijilu);
{
sprintf(datijilu,”type %s>>D:\\testi\\data\\single\\”,a);
sprintf(datijilu2,”%s.txt”,kaohao);
strcat(datijilu,datijilu2);
system(datijilu);
}
}
sprintf(shiti,”more<%s”,a); //利用sprintf函数解决那个很棘手的问题
system(“cls”);
printf(“\n\t\t********欢迎进入生存挑战赛答题系统**********\n\n”);
system(shiti);
return 0;
}
/*int ReadAns(void)
{
FILE *fp;
int i;
if((fp=fopen(“IN.DAT”,”r”)) == NULL) return 1;
for(i=0;i<100;i++){
if(fgets(xx[i],11,fp)==NULL)return 1;
xx[i][10]=’\0′;
}
fclose(fp);
return 0;
}
*/
char lajiqingli()/*本函数的目的是返回程序中的正确的答案*/
{
if (dakaidat())
{
printf(“文件rightkey.dat打开错误!\n”);
printf(“\a”);
}
return xx[2][4];
}
int dakaidat()/*本程序的目的是把正确的答案存到数组xx里面*/
{
FILE *fp;
int i=0;
char *p;
if((fp=fopen(“D:\\testi\\key\\rightkey.dat”,”r”))==NULL) return 1;
while(fgets(xx[i],250,fp)!=NULL)
{
p=strchr(xx[i],’\n’);
if(p)*p=0;
i++;
}
maxline=i;
fclose(fp);
return 0;
}
int shifoubaocun()/*本程序的目的是把正确的答案存到数组xx里面*/
{
FILE *fp;
int i=0;
char *p;
if((fp=fopen(“D:\\testi\\result\\danyichengji.tmp”,”r”))==NULL) return 1;
while(fgets(c[i],100,fp)!=NULL)
{
p=strchr(c[i],’\n’);
if(p)*p=0;
i++;
}
fclose(fp);
return 0;
}
int yanzhengkaohao()
{
FILE *fp;
int i=0;
char *p;
if((fp=fopen(“D:\\testi\\data\\exist.dat”,”r”))==NULL) return 1;
while(fgets(kh[i],100,fp)!=NULL)
{
p=strchr(kh[i],’\n’);
if(p)*p=0;
i++;
}
fclose(fp);
return 0;
}
呵呵 ,有点小长。。。。
不过确实是我一个字一个字的打出来的……………………