| 60.232.1.* |
1楼 (指导教师:孙秀芳) 计算机科学与技术专业(本科) 姓名:王 海 萍(hpwang001@sina.com,hpwang001@hotmail.com) 学号:0058039 这是三年前编的,花了大约两个月的时间,现在看起来虽然有很多不足,但还是满有成就感的,希望大家多提宝贵意见,并对大家有帮助.这个系统是图形界面的,但由于不会贴图,所以有点遗憾,希望大家谅解.大家可以把源程序复制到turboc目录重新编译即可. 综 述 这是一个描述学生成绩管理的软件。该软件的目的是有效地对学生的成绩进行操作处理。使用的开发工具是TURBOC2.0。该软件具有图形界面操作,直观易上手;结构性较好,扩充空间比较大的优点。但由于种种原因,时间有限,所以在各模块功能上还有很多亟待解决和完善的问题,如没有加入翻页、鼠标功能、操作上比较麻烦等缺点,希望老师多加批评指正,我将会在今后不断加以完善。 各模块功能及界面介绍 本软件由一个主程序调用模块和五个功能模块(它们是:按键功能定义模块;图象文件读取功能模块;图形界面下汉字、字符共显功能模块;系统框架绘制模块;具体菜单功能实现模块。)。 程序清单及各功能模块说明 /*按键功能定义模块—-文件名:public.c*/ #define RIGHT 77 #define LEFT 75 #define UP 72 #define DOWN 80 #define ESC 27 #define F1 59 #define ENTER 13 #define ALT_X 45 #define SPACE 32 #define MAX_FRAME 5 int specialkey() { int key; /* while(bioskey(1)==0);*/ key=bioskey(0); key=key&0xff?key&0xff:key>>8; return(key); } /*320*200*256色图像调用功能模块—文件名:mypcx.c*/ #define SCREEN_HEIGHT 200 #define SCREEN_WIDTH 320 #define PALETTE_MASK 0x3c6 #define PALETTE_REGISTER_RD 0x3c7 #define PALETTE_REGISTER_WR 0x3c8 #define PALETTE_DATA 0x3c9 #define VGA256 0x13 #define TEXT_MODE 0x03 /*video_buffer表示的是显存地置*/ unsigned char far *video_buffer=(char far *)0xA0000000L; /*定义pcx图象头文件的结构体*/ typedef struct pcx_header_typ { char manufacturer; /*制造厂*/ char version; /*版本*/ char encoding; /*编码方式*/ char bits_per_pixel; int x,y; int width,height; /*图象的宽度和高度*/ int horz_res; int vert_res; char ega_palette[48]; char reserved; char num_color_planes; int bytes_per_line; int palette_type; char padding[58]; } pcx_header, *pcx_header_ptr; /*调色板数据*/ typedef struct RGB_color_typ { unsigned char red; unsigned char green; unsigned char blue; }RGB_color,*RGB_color_ptr; /*pcx 图象文件结构*/ typedef struct pcx_picture_typ { pcx_header header; RGB_color palette[256]; char far *buffer; } pcx_picture, *pcx_picture_ptr; /*设置调色板数据*/ void Set_Palette_Register(int index,RGB_color_ptr color) { outp(PALETTE_MASK,0xff); outp(PALETTE_REGISTER_WR,index); outp(PALETTE_DATA,color->red); outp(PALETTE_DATA,color->green); outp(PALETTE_DATA,color->blue); } /*-------------------------------------------------------*/ void PCX_Load_Screen(char *filename,int enable_palette) { FILE *fp; int num_bytes,index; unsigned int count; unsigned char data; RGB_color palette[256]; fp = fopen(filename,"rb"); fseek(fp,128L,SEEK_SET); count=0; /*------*/ while(count<=(unsigned int)SCREEN_WIDTH * SCREEN_HEIGHT) { data = getc(fp); |
|
|
| 60.232.1.* |
2楼 { num_bytes = data-192; data = getc(fp); /*读出重复次数*/ while(num_bytes-->0) /*读出下一个字节,即颜色*/ { video_buffer[count++]=data; /*将重复的颜色数据读取到内存*/ } } else /*如果读到的字节在0-191之间*/ { video_buffer[count++]=data; /*直接将颜色数据读到内存*/ } } /*-------*/ for (index=0; index<256; index++) { palette[index].red = (getc(fp) >> 2); palette[index].green = (getc(fp) >> 2); palette[index].blue = (getc(fp) >> 2); } /*------*/ if (enable_palette) { for (index=0; index<256; index++) { Set_Palette_Register(index,(RGB_color_ptr)&palette[index]); } } /*------*/ getch(); for(index=255;index>=0;index--) { palette[index].red=10; palette[index].green=10; palette[index].blue=10; Set_Palette_Register(index,(RGB_color_ptr)&palette[index]); delay(500); } fclose(fp); } /*--------------------------------------------------------------*/ void Set_Video_Mode(int mode) { union REGS inregs,outregs; inregs.h.ah=0; inregs.h.al=(unsigned char)mode; int86(0x10,&inregs,&outregs); } /*图形模式下16*16点阵和24*24点阵汉字和字符共显功能模块—-文件名:chi_asc.c*/ int handle; /*---------------------16*16point--------------------------------*/ int puthz16(int x,int y,int z,int color,char *p) { unsigned int i,c1,c2,f=0; int i1,i2,i3,rec; long l; char by[32]; while((i=*p)!=0) { /*------------begin chinese16------------*/ if(i>0xa1) { handle=open("c:\\zk\\HZK16",O_RDONLY|O_BINARY); if(f==0) { c1=(i-0xa1)&0x07f; f=1; } else { c2=(i-0xa1)&0x07f; f=0; rec=c1*94+c2; l=rec*32L; lseek(handle,l,SEEK_SET); read(handle,by,32); for(i1=0;i1<16;i1++) for(i2=0;i2<2;i2++) for(i3=0;i3<8;i3++) if(getbit(by[i1*2+i2],7-i3)) putpixel(x+i2*8+i3,y+i1,color); x=x+16+z; } close(handle); } /*--------------end chinese-----------------*/ /*-------begin ascii-----------*/ else { handle=open("c:\\zk\\ASC16",O_RDONLY|O_BINARY); Put_Asc(&x,&y,&z,color,p); } /*--------end ascii-----------*/ *p++; } return(x); } /*---------------------24*24point------------------------------*/ /*---------------------------------------------------*/ int puthz24(int x,int y,int z,int color,char *p) { unsigned int i,c1,c2,f=0; int i1,i2,i3,rec; long l; char by[72]; while((i=*p)!=0) { /*------------begin chinese24------------*/ if(i>0xa1) { handle=open("c:\\zk\\HZK24f",O_RDONLY|O_BINARY); if(f==0) { c1=(i-0xb0)&0x07f; f=1; } else { c2=(i-0xa1)&0x07f; f=0; rec=c1*94+c2; l=rec*72L; lseek(handle,l,SEEK_SET); read(handle,by,72); for(i1=0;i1<24;i1++) for(i2=0;i2<3;i2++) for(i3=0;i3<8;i3++) if(getbit(by[i1*3+i2],7-i3)) |
|
|
| 60.232.1.* |
3楼 x=x+24+z; } close(handle); } /*--------------end chinese-----------------*/ /*-------begin ascii-----------*/ else { handle=open("c:\\zk\\ASC16",O_RDONLY|O_BINARY); Put_Asc(&x,&y,&z,color,p); } /*--------end ascii-----------*/ *p++; } return(x); } /*---------------------------------------------------*/ int getbit(unsigned char c,int n) { return((c>>n)&1); } /*---------------------------------------------------*/ Put_Asc(int *x,int *y,int *z,int color,char *p){ int a,b; unsigned char buf[16]; long int l; l=*p*16L; lseek(handle,l,SEEK_SET); read(handle,buf,16); for(a=0;a<16;a++) for(b=0;b<8;b++) if((buf[a]>>7-b)&1) putpixel(*x+b,*y+a,color); close(handle); *x=*x+16+*z; } /*---------------------------------------------------*/ /*主框图绘制模块—文件名:stu_frame.c*/ #define START_X 0 #define START_Y 80 #define END_X 639 #define END_Y 450 main_frame(int bk_color,int frame_color) { char *bottom1,*bottom2; bottom1="F1: <- ->: ENTER: ESC:"; bottom2=" Help message Move arrow Select Quit"; setbkcolor(bk_color); setcolor(frame_color); rectangle(0,0,END_X,START_Y); setfillstyle(SOLID_FILL,frame_color); floodfill(1,1,frame_color); rectangle(START_X,END_Y,END_X,END_Y); setfillstyle(SOLID_FILL,frame_color); floodfill(START_X+1,END_Y+1,frame_color); setcolor(WHITE); line(START_X+5,START_Y+7,END_X-5,START_Y+7); line(START_X+5,END_Y-7,END_X-5,END_Y-7); line(START_X+5,START_Y+7,START_X+5,END_Y-7); line(END_X-5,START_Y+7,END_X-5,END_Y-7); rectangle(5,120,634,420); puthz16(START_X+20,END_Y+10,-8,DARKGRAY,bottom1); puthz16(START_X+20,END_Y+10,-8,BLUE,bottom2); } /*菜单具体功能实现模块—文件名:stu_sub.c*/ FILE *fp; int if_open; int les_count; char les_name[10][20]; struct score{ int stu_number; char stu_name[20]; int result[10]; struct score *next; }*head; /*---------------------------------------------*/ fil_open(){ /*打开文件*/ struct score *p1,*p2; char *ope_name,ch; void *buf; int i=0,x=130; buf=dia_bar(100,150,-8,"INPUT THE FILE NAME:"); ope_name=vis_input(); delete_bar(100,150,buf); if((fp=fopen(ope_name,"r+"))==NULL) { buf=mess_bar(100,100,"OPEN FILE ERROR!"); delete_bar(100,100,buf); } if(fp!=NULL){ if_open=1; fscanf(fp,"%d",&les_count); for(i=0;i<les_count;i++) fscanf(fp,"%s",les_name[i]); p1=(struct score *)malloc(sizeof(struct score)); if(!p1)exit(0); p2=p1;head=p1; fscanf(fp,"%d",&p1->stu_number); fscanf(fp,"%s",p1->stu_name); for(i=0;i<les_count;i++) fscanf(fp,"%d",&p1->result[i]); while(p1->stu_number!=0) { p1=(struct score *)malloc(sizeof(struct score)); if(!p1)exit(0); p2->next=p1; p2=p1; fscanf(fp,"%d",&p1->stu_number); fscanf(fp,"%s",p1->stu_name); for(i=0;i<les_count;i++) |
|
|
| 60.232.1.* |
4楼 } p1->next=0; setviewport(20,130,619,400,1); clearviewport(); setviewport(20,100,619,119,1); clearviewport(); puthz16(0,0,4,YELLOW,"学号"); puthz16(65,0,6,YELLOW,"姓名"); for(i=0;i<les_count;i++) { puthz16(x,0,5,YELLOW,les_name[i]); x+=80; } print(head); } } /*------------------------------------------------*/ fil_new(){ /*新建文件*/ struct score *p1,*p2; char *new_name,*name,ch,*add0,*result0,*les_cou,s[30]; int add1,result1,i,j,x; void *buf; x=130; if_open=1; p1=(struct score *)malloc(sizeof(struct score)); if(!p1)exit(0); head=p1;p2=p1; setviewport(20,130,619,400,1); clearviewport(); setviewport(20,100,619,119,1); clearviewport(); buf=dia_bar(100,150,-8,"INPUT LESSON TOTAL:"); les_cou=vis_input(); delete_bar(100,150,buf); les_count=strtoint(les_cou); for(i=0;i<les_count;i++) { buf=dia_bar(100,150,-8,"LESSON NAME:"); name=vis_input(); delete_bar(100,150,buf); for(j=0;name[j]!='\0';j++) les_name[i][j]=name[j]; les_name[i][j]='\0'; } setviewport(20,100,619,119,1); puthz16(0,0,4,YELLOW,"学号"); puthz16(65,0,6,YELLOW,"姓名"); for(i=0;i<les_count;i++) { puthz16(x,0,5,YELLOW,les_name[i]); x+=80; } buf=dia_bar(100,150,-8,"INPUT NUMBER:"); add0=vis_input(); delete_bar(100,150,buf); add1=strtoint(add0); p1->stu_number=add1; buf=dia_bar(100,150,-8,"NAME IS:"); name=vis_input(); delete_bar(100,150,buf); for(i=0;name[i]!='\0';i++) p1->stu_name[i]=name[i]; p1->stu_name[i]='\0'; for(i=0;i<les_count;i++) { buf=dia_bar(100,150,4,les_name[i]); result0=vis_input(); delete_bar(100,150,buf); result1=strtoint(result0); p1->result[i]=result1; } for(;;) { p1=(struct score*)malloc(sizeof(struct score)); if(!p1)exit(0); p2->next=p1;p2=p1; buf=dia_bar(100,150,-8,"INPUT NUMBER:"); add0=vis_input(); delete_bar(100,150,buf); add1=strtoint(add0); p1->stu_number=add1; if(!add1)break; buf=dia_bar(100,150,-8,"NAME IS:"); name=vis_input(); delete_bar(100,150,buf); for(i=0;name[i]!='\0';i++) p1->stu_name[i]=name[i]; p1->stu_name[i]='\0'; for(i=0;i<les_count;i++) { buf=dia_bar(100,150,4,les_name[i]); result0=vis_input(); delete_bar(100,150,buf); result1=strtoint(result0); p1->result[i]=result1; } } /*for finish*/ p1->next=0; print(head); } /*------------------------------------------------*/ fil_save(){ /*文件存盘*/ struct score *p; char *save_name; void *buf; int i,end=0; p=head; if(if_open==0) { buf=mess_bar(100,100,"OPEN FILE FIRST!"); |
|
|
| 60.232.1.* |
5楼 } if(if_open==1) { buf=dia_bar(100,150,-8,"INPUT FILE NAME:"); save_name=vis_input(); delete_bar(100,150,buf); if((fp=fopen(save_name,"w"))==NULL) { buf=mess_bar(90,130,"OPEN FILE ERROR!"); delete_bar(90,130,buf); exit(1); } fprintf(fp,"%d ",les_count); for(i=0;i<les_count;i++) fprintf(fp,"%s ",les_name[i]); fprintf(fp,"\n"); while(p->next!=NULL) { fprintf(fp,"%d ",p->stu_number); fprintf(fp,"%s ",p->stu_name); for(i=0;i<les_count;i++) fprintf(fp,"%d ",p->result[i]); fprintf(fp,"\n"); p=p->next; } fprintf(fp,"%d",end); fclose(fp); buf=mess_bar(100,100,"SAVE SUCESS!"); delete_bar(100,100,buf); } } /*------------------------------------------------*/ sys_exit(){ /*退出系统*/ fcloseall(); closegraph(); exit(0); } /*------------------------------------------------*/ dat_add(){ /*记录添加*/ struct score *p1,*p2,*p; char *num0,*add0,*result0; void *buf; char *name; int num1,add1,result1,i; p=(struct score *)malloc(sizeof(struct score)); if(if_open==0) { buf=mess_bar(100,100,"OPEN FILE FIRST!"); delete_bar(100,100,buf); } if(if_open==1) { buf=dia_bar(100,150,-8,"WHERE TO INSERT:"); num0=vis_input(); delete_bar(100,150,buf); num1=strtoint(num0); p1=head; while(num1!=p1->stu_number&&p1->next!=NULL) { p2=p1; p1=p1->next; } if(num1==p1->stu_number) { buf=dia_bar(100,150,-8,"NUMBER FOR ADD:"); add0=vis_input(); delete_bar(100,150,buf); add1=strtoint(add0); p->stu_number=add1; buf=dia_bar(100,150,-8,"NAME IS:"); name=vis_input(); delete_bar(100,150,buf); for(i=0;name[i]!='\0';i++) p->stu_name[i]=name[i]; p->stu_name[i]='\0'; for(i=0;i<les_count;i++) { buf=dia_bar(100,150,4,les_name[i]); result0=vis_input(); delete_bar(100,150,buf); result1=strtoint(result0); p->result[i]=result1; } if(p1==head) { head=p;p->next=p1; } else { p2->next=p; p->next=p1; } buf=mess_bar(80,130,"ADD SUCCESS!"); delete_bar(80,130,buf); } else{ buf=mess_bar(80,130,"NOT FIND NUMBER!"); delete_bar(80,130,buf); } } setviewport(20,130,619,400,1); clearviewport(); print(head); } /*------------------------------------------------*/ dat_dele(){ /*记录删除*/ struct score *p1,*p2; char *num0; void *buf; int num1; if(if_open==0) { buf=mess_bar(100,100,"OPEN FILE FIRST!"); delete_bar(100,100,buf); } if(if_open==1) { buf=dia_bar(100,150,-8,"THE NUMBER TO DELETE:"); num0=vis_input(); delete_bar(100,150,buf); num1=strtoint(num0); |
|
|
| 60.232.1.* |
6楼 p1=head; while(num1!=p1->stu_number&&p1->next!=NULL) { p2=p1; p1=p1->next; } if(num1==p1->stu_number) { if(p1==head)head=p1->next; else p2->next=p1->next; buf=mess_bar(80,130,"DELETE SUCCESS!"); delete_bar(80,130,buf); } else{ buf=mess_bar(80,130,"NOT FIND NUMBER!"); delete_bar(80,130,buf); } } setviewport(20,130,619,400,1); clearviewport(); print(head); } /*-------------------------------------------------*/ dat_mod(){ /*记录修改*/ struct score *p1,*p2,*p; char *num0,*add0,*result0; void *buf; char *name; int num1,add1,result1,i; p=(struct score *)malloc(sizeof(struct score)); if(if_open==0) { buf=mess_bar(100,100,"OPEN FILE FIRST!"); delete_bar(100,100,buf); } if(if_open==1) { buf=dia_bar(100,150,-8,"NUMBER TO MODIFY:"); num0=vis_input(); delete_bar(100,150,buf); num1=strtoint(num0); p1=head; while(num1!=p1->stu_number&&p1->next!=NULL) { p2=p1; p1=p1->next; } if(num1==p1->stu_number) { buf=dia_bar(100,150,-8,"NUMBER AFTER MODIFY:"); add0=vis_input(); delete_bar(100,150,buf); add1=strtoint(add0); p->stu_number=add1; buf=dia_bar(100,150,-8,"NAME AFTER MODIFY:"); name=vis_input(); delete_bar(100,150,buf); for(i=0;name[i]!='\0';i++) p->stu_name[i]=name[i]; p->stu_name[i]='\0'; for(i=0;i<les_count;i++) { buf=dia_bar(100,150,4,les_name[i]); result0=vis_input(); delete_bar(100,150,buf); result1=strtoint(result0); p->result[i]=result1; } p2->next=p; p->next=p1->next; buf=mess_bar(80,130,"MODIFY SUCCESS!"); delete_bar(80,130,buf); } else{ buf=mess_bar(80,130,"NOT FIND NUMBER!"); delete_bar(80,130,buf); } } setviewport(20,130,619,400,1); clearviewport(); print(head); } /*-------------------------------------------------*/ fil_prn(){ /*文件打印*/ struct score *p; void *buf; char s[30]; int i; p=(struct score *)malloc(sizeof(struct score)); if(!p)exit(0); p=head; buf=mess_bar(80,130,"PRINTER READY..."); delete_bar(80,130,buf); if(if_open==0) { buf=mess_bar(80,130,"OPEN FILE FIRST!"); delete_bar(80,130,buf); } else { fprintf(stdprn," 学 号 姓 名 "); for(i=0;i<les_count;i++) fprintf(stdprn,"%s ",les_name[i]); fprintf(stdprn,"%c%c",0x0d,0x0a); while(p->stu_number!=0){ sprintf(s,"%d",p->stu_number); fprintf(stdprn,s); fprintf(stdprn," %s ",p->stu_name); for(i=0;i<les_count;i++) { sprintf(s," %d ",p->result[i]); fprintf(stdprn,s); } fprintf(stdprn,"%c%c",0x0d,0x0a); p=p->next; } } } /*-------------------------------------------------*/ |
|
|
| 60.232.1.* |
7楼 void *buf; buf=(void *)creat_bar(300,100,550,200); setcolor(WHITE); rectangle(0,0,250,100); setfillstyle(SOLID_FILL,LIGHTGRAY); floodfill(1,1,WHITE); setcolor(WHITE); rectangle(10,10,240,92); setfillstyle(SOLID_FILL,DARKGRAY); floodfill(11,11,WHITE); puthz16(25,15,-8,WHITE,"<< >>"); puthz16(45,15,4,WHITE,"学生成绩管理系统"); puthz16(35,35,-8,WHITE,"Author:"); puthz16(90,35,5,WHITE,"王海萍"); puthz16(35,55,-8,WHITE,"Number:"); puthz16(90,55,-8,WHITE,"0058039"); puthz16(35,75,-8,WHITE,"Tele:"); puthz16(75,75,-8,WHITE,"0531-8990864"); getch(); delete_bar(300,100,buf); } /*===========消息框显示功能====================*/ mess_bar(int x,int y,char *s) { int size; void *buf; size=imagesize(x,y,x+150,y+50); if(size!=-1) { buf=malloc(size); if(buf)getimage(x,y,x+150,y+50,buf); else {printf("OUT MEMORY!");exit(1);} } setviewport(x,y,x+150,y+50,1); clearviewport(); setcolor(WHITE); rectangle(0,0,150,50); setfillstyle(SOLID_FILL,LIGHTGRAY); floodfill(1,1,WHITE); puthz16(10,10,-8,WHITE,s); getch(); return (buf); } /*==============对话框显示功能======================*/ dia_bar(int x,int y,int z,char *s) { int size; void *buf; size=imagesize(x,y,x+200,y+80); if(size!=-1){ buf=malloc(size); if(buf)getimage(x,y,x+200,y+80,buf); else {printf("OUT OF MEMORY!");exit(1);} } setviewport(x,y,x+200,y+80,1); clearviewport(); setcolor(WHITE); rectangle(0,0,200,80); setfillstyle(SOLID_FILL,DARKGRAY); floodfill(1,1,WHITE); setcolor(LIGHTGRAY); rectangle(50,40,150,60); setfillstyle(SOLID_FILL,WHITE); floodfill(51,41,LIGHTGRAY); puthz16(20,5,z,WHITE,s); puthz16(25,22,-8,WHITE,"(END BY #)"); return(buf); } /*============屏幕输入并回显功能===============*/ vis_input() { char ch,*name,s[2]; int i=0; name=(char *)malloc(sizeof(char)); while((ch=getch())!='#') { name[i]=ch; s[0]=name[i]; name[++i]='\0';s[1]=name[i]; puthz16(46+i*8,43,-8,BLUE,s); }name[i]='\0'; return(name); } /*==========字符串转换成整数功能===============*/ strtoint(char *s) { int i,j,l,num1,num2; l=strlen(s); num1=1;num2=0; for(i=0;i<l;i++) { num1=s[i]-'0'; for(j=0;j<l-i-1;j++)num1=num1*10; num2=num2+num1; } return(num2); } /*==========将链表数据显示屏幕功能================*/ print(struct score *p) { int x,y,i; char s[30]; setviewport(20,130,619,400,1); x=0;y=0; while(p->stu_number!=0){ sprintf(s,"%d",p->stu_number); puthz16(x,y+3,-8,YELLOW,s); x+=60; puthz16(x,y,4,YELLOW,p->stu_name); x+=80; for(i=0;i<les_count;i++) |
|
|
| 60.232.1.* |
8楼 sprintf(s,"%d",p->result[i]); if(p->result[i]<60) puthz16(x+10,y,-8,LIGHTRED,s); else puthz16(x+10,y,-8,YELLOW,s); x+=80; } x=0;y+=20; p=p->next; } setviewport(0,0,639,479,1); } /*===========开辟内存空间并保存掩盖图像功能================*/ creat_bar(int x0,int y0,int x1,int y1){ int size; void *buf; size=imagesize(x0,y0,x1,y1); if(size!=-1){ buf=malloc(size); if(buf)getimage(x0,y0,x1,y1,buf); else {printf("OUT MEMORY");exit(0);} } setviewport(x0,y0,x1,y1,1); clearviewport(); return(buf); } /*============删除开辟的内存空间功能================*/ delete_bar(int x0,int y0,void *buf){ setviewport(0,0,639,479,1); putimage(x0,y0,buf,COPY_PUT); free(buf); } /*stu_sub.c结束*/ /*主程序功能模块—-文件名:student.c*/ #define MAX_BAR 4 /*最大菜单数,可以自定*/ #include"io.h" #include"dos.h" #include"fcntl.h" #include"stdio.h" #include"stdlib.h" #include"math.h" #include"graphics.h" #include"chi_asc.c" /*调用图形模式下汉字、字符共显功能*/ #include"public.c" /*按键定义功能*/ #include"mypcx.c" /*封面图象调用功能,此处为pcx图象*/ #include"stu_frame.c" /*框架绘制功能*/ #include"stu_sub.c" /*各子菜单功能*/ main() { /*old_bar、curr_bar表示上次选中的菜单、当前选中的菜单*/ /*old_sonbar curr_sonbar表示上次选中的子菜单、当前选中的子菜单*/ int i,key,key_son,old_bar,curr_bar,curr_sonbar,old_sonbar,size; int save_startx,save_starty,save_endx,save_endy,sonbar_out=0; void *buf; int Driver,Mode; char *pcx; struct student_bar{ int start_x,start_y; /*起始横坐标,起始纵坐标*/ int length_x,length_y; /*菜单的长,菜单的宽*/ int num_son; /*包含子菜单的个数*/ char *p_father; /*菜单项名,*p_son[5]为子菜单名*/ char *p_son[5];}stu_bar[MAX_BAR]={ {10,45,120,25,4,"File Operation",{" Open file"," New file"," Save file","Exit system"}}, {130,45,120,25,3,"Data Edition",{" Add object","Delete object","Modify object"}}, {250,45,120,25,0,"File Print",{""}}, {370,45,120,25,0,"Help Message",{""}} };/*定义各功能菜单的结构体*/ pcx="stusys4.pcx"; Set_Video_Mode(VGA256); /*转换屏幕到320*200*256色*/ PCX_Load_Screen(pcx,1); /*读取封面图象stusys4.pcx*/ Driver=DETECT,Mode=0; initgraph(&Driver,&Mode,""); /*设置图象模式*/ cleardevice(); main_frame(BLUE,LIGHTGRAY); /*绘制主框架图,底色为蓝色*/ /*绘制菜单*/ for(i=0;i<MAX_BAR;i++) { setcolor(BLUE); rectangle(stu_bar[i].start_x, stu_bar[i].start_y, stu_bar[i].start_x+stu_bar[i].length_x, stu_bar[i].start_y+stu_bar[i].length_y); puthz16(stu_bar[i].start_x+8,stu_bar[i].start_y+5,-8,BLUE,stu_bar[i].p_father); }puthz16(stu_bar[0].start_x+8,stu_bar[0].start_y+5,-8,WHITE,stu_bar[0].p_father); old_bar=0;curr_bar=0; /*读取按键字符,如为ESC则退出*/ while((key=specialkey())!=ESC){ old_bar=curr_bar; if(sonbar_out==1)sonbar_out=0; if(key==LEFT){ if(curr_bar==0)curr_bar=3; |
|
|
| 60.232.1.* |
9楼 }/*LEFT finished*/ if(key==RIGHT){ if(curr_bar==3)curr_bar=0; else curr_bar=curr_bar+1; }/*RIGHT finished*/ /*如按键为ENTER,则绘制子菜单*/ if(key==ENTER){ save_startx=stu_bar[curr_bar].start_x; save_starty=stu_bar[curr_bar].start_y+stu_bar[curr_bar].length_y+1; save_endx=stu_bar[curr_bar].start_x+stu_bar[curr_bar].length_x; /*保存子菜单展开后掩盖住的图象*/ save_endy=stu_bar[curr_bar].start_y+stu_bar[curr_bar].length_y+stu_bar[curr_bar].num_son*stu_bar[curr_bar].length_y+1; size=imagesize(save_startx,save_starty,save_endx,save_endy); if(size!=-1) { buf=malloc(size); if(buf)getimage(save_startx,save_starty,save_endx,save_endy,buf); else {printf("OUT MEMORY");exit(0);} } setviewport(save_startx,save_starty,save_endx,save_endy,1); setcolor(WHITE); clearviewport(); for(i=1;i<=stu_bar[curr_bar].num_son;i++) { rectangle(0,0,stu_bar[curr_bar].length_x,i*stu_bar[curr_bar].length_y); setfillstyle(SOLID_FILL,LIGHTGRAY); floodfill(stu_bar[curr_bar].length_x-1,i*stu_bar[curr_bar].length_y-1,WHITE); } for(i=0;i<stu_bar[curr_bar].num_son;i++) puthz16(8,i*stu_bar[curr_bar].length_y+5,-8,BLUE,stu_bar[curr_bar].p_son[i]); puthz16(8,5,-8,WHITE,stu_bar[curr_bar].p_son[0]); old_sonbar=0;curr_sonbar=0; if(stu_bar[curr_bar].num_son) while(((key_son=specialkey())!=ESC)&&sonbar_out==0){ old_sonbar=curr_sonbar; if(key_son==UP){ if(curr_sonbar==0) curr_sonbar=stu_bar[curr_bar].num_son-1; else curr_sonbar=curr_sonbar-1; } if(key_son==DOWN){ if(curr_sonbar==(stu_bar[curr_bar].num_son-1)) curr_sonbar=0; else curr_sonbar=curr_sonbar+1; } puthz16(8,old_sonbar*stu_bar[curr_bar].length_y+5,-8,BLUE,stu_bar[curr_bar].p_son[old_sonbar]); puthz16(8,curr_sonbar*stu_bar[curr_bar].length_y+5,-8,WHITE,stu_bar[curr_bar].p_son[curr_sonbar]); if(key_son==ENTER){ setviewport(0,0,639,479,1); putimage(save_startx,save_starty,buf,COPY_PUT); free(buf); sonbar_out=1; if(curr_bar==0) switch(curr_sonbar){ case 0: fil_open(); /*调用stu_sub.c文件中fil_open()函数,打开文件*/ break; case 1: fil_new(); /*调用stu_sub.c文件中fil_new()函数,新建文件*/ break; case 2: fil_save(); /*调用stu_sub.c文件中fil_save()函数,保存文件*/ break; case 3: sys_exit(); /*调用stu_sub.c文件中sys_exit()函数,退出系统*/ } if(curr_bar==1) switch(curr_sonbar){ case 0: dat_add(); /*调用stu_sub.c文件中dat_add()函数,添加记录*/ break; case 1: dat_dele(); /*调用stu_sub.c文件中dat_dele()函数,删除记录*/ break; case 2: dat_mod(); /*调用stu_sub.c文件中dat_mod()函数,修改记录*/ break; } } /*key_son=ENTER finished*/ }/*key_son all finished*/ if(sonbar_out==0){ setviewport(0,0,639,479,1); putimage(save_startx,save_starty,buf,COPY_PUT); free(buf); /*还原子菜单掩盖住的图象,并释放子菜单所占用的内存*/ } /*如果子菜单项为0*/ if(!stu_bar[curr_bar].num_son){ if(curr_bar==2) fil_prn(); /*调用stu_sub.c文件中fil_prn()函数,打印文件*/ if(curr_bar==3) hel_mess(); /*调用stu_sub.c文件中hel_mess()函数,显示帮助信息*/ } } /*ENTER finished*/ puthz16(stu_bar[old_bar].start_x+8,stu_bar[old_bar].start_y+5,-8,BLUE,stu_bar[old_bar].p_father); puthz16(stu_bar[curr_bar].start_x+8,stu_bar[curr_bar].start_y+5,-8,WHITE,stu_bar[curr_bar].p_father); }/*key all finished*/ fcloseall(); /*关闭所有文件*/ closegraph(); /*关闭图形状态*/ } 小 结 本系统的开发,具体操作有: 1、封面的设计:使用WINDOWS自带的画图软件绘制一幅320*200*256色的图象作为封面。 2、编写过程:用TURBOC2.0编译环境编写内容。 3、用WINDOWS自带NOTEPAD编写示例文件:score.txt。数据说明见readme.txt。 |
|
|
| 202.103.155.* |
14楼 |
|
|
|
15楼 |
|
|
|
| 221.202.170.* |
17楼 注释很少,除了自己,恐怕没有人能看明白,有时自己也看不明白,下面是我刚学c3个月编的,希望给点建议 中国不需要工人,需要年轻人,需要进步, -----badming------ |
|
|
| 221.202.170.* |
18楼 #include "Conio.h" #include "graphics.h" #include <stdio.h> #include <bios.h> #define closegr closegraph #define UP 0x4800 #define DOWN 0x5000 #define LEFT 0x4b00 #define RIGHT 0x4d00 #define SPACE 0x3920 #define W 0x1177 #define S 0x1f73 #define A 0x1e61 #define D 0x2064 #define ENTER 0x1c0d #define ESC 0x011b int a[13][19]={ {10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10}, {0,1,1,10,2,10,10,104,103,102,101,10,10,10,10,10,10,10,10}, {0,1,10,12,10,10,102,102,103,103,103,10,10,10,10,10,10,10,10}, {0,10,10,10,10,120,120,12,12,103,103,13,130,130,10,10,10,10,10}, {0,10,10,10,10,120,1204,102,102,103,103,130,130,130,10,10,10,10,10}, {0,10,10,10,10,120,1204,102,102,103,103,130,130,130,10,10,10,10,10}, {0,10,10,10,10,1204,1204,102,102,13,130,130,130,130,10,10,10,10,10}, {0,10,10,10,10,120,1204,120,102,103,130,130,130,130,10,10,10,10,10}, {0,10,10,10,10,120,1204,120,102,104,140,140,10,10,10,103,10,10,10}, {0,10,10,10,10,140,14,14,14,140,104,140,10,10,103,10,104,104,104}, {0,10,10,10,10,140,14,14,14,140,104,140,10,104,10,104,10,104,10}, {0,10,10,10,10,140,14,14,14,140,104,140,10,10,102,102,102,10,1}, {0,10,10,10,10,140,144,1440,1400,104,140,140,10,10,10,10,4,1,1}}; int a1=1,b1=1,mov1=1,high1=1,wide1=1,num1=1,lnum1=1,life1=100; int a2=18,b2=12,mov2=1,high2=1,wide2=1,num2=1,lnum2=1,life2=10; struct po{int x;int y;int lmax;int rmax;int umax;int dmax; int feel;long time;struct po *next;}; struct po po1,po2,po3,po4,po5,po6,po7,po8,po9,po10,po11,po12,po13,po14,po15,po16,*p1,*p2; f(x,y) {int z; if(a[y][x]<10)z=a[y][x];else z=a[y][x]/10; return z;} g(x,y) {int z; z=a[y][x]%10; return z; } void initgr(void) /* BGI初始化 */ { int gd = DETECT, gm = 0; /* 和gd = VGA,gm = VGAHI是同样效果 */ registerbgidriver(EGAVGA_driver);/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */ initgraph(&gd, &gm, ""); } draw0(x,y) {setfillstyle(1,14);bar(30*x+20,30*y+30,30*x+50,30*y+60);} draw1(x,y) {setcolor(BLUE);setfillstyle(1,GREEN);bar(30*x+20,30*y+30,30*x+50,30*y+60);} draw2(x,y) {setcolor(RED);line(30*x+35,30*y+30,30*x+35,30*y+60); line(30*x+20,30*y+45,30*x+35,30*y+30);line(30*x+35,30*y+30,30*x+50,30*y+45);} draw3(x,y) {setcolor(RED);line(30*x+20,30*y+45,30*x+50,30*y+45); line(30*x+35,30*y+30,30*x+50,30*y+45);line(30*x+50,30*y+45,30*x+35,30*y+60);} draw4(x,y) {setcolor(9);line(30*x+20,30*y+45,30*x+50,30*y+45); line(30*x,30*y+15,30*x+30,30*y+15);circle(30*x+35,30*y+45,15);} draw5(x,y) {setcolor(0);setfillstyle(1,0);pieslice(30*x+35,30*y+45,0,360,15);} draw6(x,y) {setcolor(RED);setfillstyle(1,13);bar(30*x+20,30*y+30,30*x+50,30*y+60);} draw7(x,y) {setcolor(RED);circle(30*x+35,30*y+40,10); line(30*x+35,30*y+50,30*x+35,30*y+60);line(30*x+35,30*y+50,30*x+40,30*y+60);} draw8(x,y) {setcolor(YELLOW);circle(30*x+35,30*y+40,10); line(30*x+35,30*y+50,30*x+35,30*y+60);line(30*x+35,30*y+50,30*x+40,30*y+60);} draw(x,y,z) {switch(z){ case 0:draw0(x,y);break; case 1:draw1(x,y);break; case 2:draw2(x,y);break; case 3:draw3(x,y);break; case 4:draw4(x,y);break; |
|
|
| 221.202.170.* |
19楼 case 6:draw6(x,y);break; case 7:draw7(x,y);break; case 8:draw8(x,y);break; } } initpic() {int i,j; cleardevice(); setbkcolor(WHITE); for(j=1;j<=12;j+=1)for(i=1;i<=18;i+=1)draw(i,j,g(i,j)); draw(a1,b1,7); draw(a2,b2,8); } /**************************/ eatpo1(){ if(num1<=7) {num1+=1;lnum1+=1;switch(num1){ case 2:po1.next=&po2;po2.next=&po1;po2.feel=0;break; case 3:po2.next=&po3;po3.next=&po1;po3.feel=0;break; case 4:po3.next=&po4;po4.next=&po1;po4.feel=0;break; case 5:po4.next=&po5;po5.next=&po1;po5.feel=0;break; case 6:po5.next=&po6;po6.next=&po1;po6.feel=0;break; case 7:po6.next=&po7;po7.next=&po1;po7.feel=0;break; case 8:po7.next=&po8;po8.next=&po1;po8.feel=0;break;}}} eatpo2(){if(num2<=7) {num2+=1;lnum2+=1;switch(num2){ case 2:po9.next=&po10;po10.next=&po9;po10.feel=0;break; case 3:po10.next=&po11;po11.next=&po9;po11.feel=0;break; case 4:po11.next=&po12;po12.next=&po9;po12.feel=0;break; case 5:po12.next=&po13;po13.next=&po9;po13.feel=0;break; case 6:po13.next=&po14;po14.next=&po9;po14.feel=0;break; case 7:po14.next=&po15;po15.next=&po9;po15.feel=0;break; case 8:po15.next=&po16;po16.next=&po9;po16.feel=0;break;}}} /***********/ eat1() {switch(g(a1,b1)) {case 2:high1+=1;a[b1][a1]=f(a1,b1);break; case 3:wide1+=1;a[b1][a1]=f(a1,b1);break; case 4:eatpo1();a[b1][a1]=f(a1,b1);break; } }eat2() {switch(g(a2,b2)) {case 2:high2+=1;a[b2][a2]=f(a2,b2);break; case 3:wide2+=1;a[b2][a2]=f(a2,b2);break; case 4:eatpo2();a[b2][a2]=f(a2,b2);break; } } /**********************************/ up1() {if(b1>=2&&g(a1,(b1-1))!=0&&g(a1,(b1-1))!=5) {draw(a1,b1,1);draw(a1,b1,g(a1,b1));b1-=1;draw(a1,b1,1);draw(a1,b1,7);eat1();}} down1() {if(b1<=11&&g(a1,(b1+1))!=0&&g(a1,(b1+1))!=5) {draw(a1,b1,1);draw(a1,b1,g(a1,b1));b1+=1;draw(a1,b1,1);draw(a1,b1,7);eat1();}} left1() {if(a1>=2&&g((a1-1),b1)!=0&&g((a1-1),b1)!=5) {draw(a1,b1,1);draw(a1,b1,g(a1,b1));a1-=1;draw(a1,b1,1);draw(a1,b1,7);eat1();}} right1() {if(a1<=17&&g((a1+1),b1)!=0&&g((a1+1),b1)!=5) {draw(a1,b1,1);draw(a1,b1,g(a1,b1));a1+=1;draw(a1,b1,1);draw(a1,b1,7);eat1();}} put1() {if(lnum1>=1){draw(a1,b1,5);a[b1][a1]=5;(*p1).x=a1;(*p1).y=b1;(*p1).time=110000;(*p1).feel=1;p1=(*p1).next;lnum1-=1;}} /*********************************************/ up2() {if(b2>=2&&g(a2,(b2-1))!=0&&g(a2,(b2-1))!=5) {draw(a2,b2,1);draw(a2,b2,g(a2,b2));b2-=1;draw(a2,b2,1);draw(a2,b2,8);eat2();}} down2() {if(b2<=11&&g(a2,(b2+1))!=0&&g(a2,(b2+1))!=5) {draw(a2,b2,1);draw(a2,b2,g(a2,b2));b2+=1;draw(a2,b2,1);draw(a2,b2,8);eat2();}} left2() {if(a2>=2&&g((a2-1),b2)!=0&&g((a2-1),b2)!=5) {draw(a2,b2,1);draw(a2,b2,g(a2,b2));a2-=1;draw(a2,b2,1);draw(a2,b2,8);eat2();}} right2() {if(a2<=17&&g((a2+1),b2)!=0&&g((a2+1),b2)!=5) {draw(a2,b2,g(a2,b2));a2+=1;draw(a2,b2,1);draw(a2,b2,8);eat2();}} put2() {if(lnum2>=1){draw(a2,b2,5);a[b2][a2]=5;(*p2).x=a2;(*p2).y=b2;(*p2).time=110000;(*p2).feel=1;p2=(*p2).next;lnum2-=1;}} getkey() { if(bioskey(1)!=0) {switch(bioskey(0)) { case UP:if(mov1==1)up1();break; case DOWN: if(mov1==1)down1();break; |
|
|
| 221.202.170.* |
20楼 case RIGHT: if(mov1==1)right1();break; case ENTER: if(mov1==1)put1();break; case ESC: closegr();exit(1);break; case W: if(mov2==1)up2();break; case S: if(mov2==1)down2();break; case A: if(mov2==1)left2();break; case D: if(mov2==1)right2();break; case SPACE : if(mov2==1)put2();break; } } } /*****************************/ die1() {if(a1==(*p1).x&&b1==(*p1).y){mov1=0;life1-=1;} if(a2==(*p1).x&&b2==(*p1).y){mov2=0;life2-=1;} } die2() {if(a1==(*p2).x&&b1==(*p2).y){mov1=0;life1-=1;} if(a2==(*p2).x&&b2==(*p2).y){mov2=0;life2-=1;} } poon1() {int i; for(i=(*p1).lmax;i<=(*p1).rmax;i+=1) {draw(i,(*p1).y,6);a[(*p1).y][i]=f(i,(*p1).y); if(a1==i&&b1==(*p1).y){mov1=0;life1-=1;} if(a2==i&&b2==(*p1).y){mov2=0;life2-=1;}} for(i=(*p1).umax;i<=(*p1).dmax;i+=1) {draw((*p1).x,i,6);a[i][(*p1).x]=f((*p1).x,i); if(a1==(*p1).x&&b1==i){mov1=0;life1-=1;} if(a2==(*p1).x&&b2==i){mov2=0;life2-=1;} } } poon2() {int i; for(i=(*p2).lmax;i<=(*p2).rmax;i+=1) {draw(i,(*p2).y,6);a[(*p2).y][i]=f(i,(*p2).y); if(a1==i&&b1==(*p2).y){mov1=0;life1-=1;} if(a2==i&&b2==(*p2).y){mov2=0;life2-=1;}} for(i=(*p2).umax;i<=(*p2).dmax;i+=1) {draw((*p2).x,i,6);a[i][(*p2).x]=f((*p2).x,i); if(a2==(*p2).x&&b2==i){mov2=0;life2-=1;} if(a1==(*p2).x&&b1==i){mov1=0;life1-=1;}} } pooff1() {int i; for(i=(*p1).lmax;i<=(*p1).rmax;i+=1){draw(i,(*p1).y,1);draw(i,(*p1).y,g(i,(*p1).y));} for(i=(*p1).umax;i<=(*p1).dmax;i+=1){draw((*p1).x,i,1);draw((*p1).x,i,g((*p1).x,i));} } pooff2() {int i; for(i=(*p2).lmax;i<=(*p2).rmax;i+=1){draw(i,(*p2).y,1);draw(i,(*p2).y,g(i,(*p2).y));} for(i=(*p2).umax;i<=(*p2).dmax;i+=1){draw((*p2).x,i,1);draw((*p2).x,i,g((*p2).x,i));} } open12() {(*p1).time-=1;if((*p1).time==200)(*p1).feel=2;} open22() {(*p2).time-=1;if((*p2).time==200)(*p2).feel=2;} get1() {if(high1>=(*p1).y)(*p1).umax=1;else (*p1).umax=(*p1).y-high1; if(high1+(*p1).y>12)(*p1).dmax=12;else (*p1).dmax=(*p1).y+high1; if(wide1>=(*p1).x)(*p1).lmax=1;else (*p1).lmax=(*p1).x-wide1; if(wide1+(*p1).x>18)(*p1).rmax=1;else (*p1).rmax=(*p1).x+wide1; } get2() {if(high2>=(*p2).y)(*p2).umax=1;else (*p2).umax=(*p2).y-high2; if(high2+(*p2).y>12)(*p2).dmax=12;else (*p2).dmax=(*p2).y+high2; if(wide2>=(*p2).x)(*p2).lmax=1;else (*p2).lmax=(*p2).x-wide2; if(wide2+(*p2).x>18)(*p2).rmax=18;else (*p2).rmax=(*p2).x+wide2; } open13() {int i; if((*p1).time==200){get1();poon1();(*p1).time-=1;} if((*p1).time==0){a[(*p1).y][(*p1).x]=1;pooff1();(*p1).feel=0;lnum1+=1;} else{poon1();(*p1).time-=1; } } open23() {int i; if((*p2).time==200){get2();poon2();(*p2).time-=1;} if((*p2).time==0){a[(*p2).y][(*p2).x]=1;pooff2();(*p2).feel=0;lnum2+=1;} else{poon2();(*p2).time-=1; } } /*********************************/ broken1() {int i; for(i=1;i<=num1;i+=1) {switch((*p1).feel){ case 1:open12();break; case 2:open13();break; } p1=(*p1).next; } } broken2() {int i; for(i=1;i<=num2;i+=1) {switch((*p2).feel){ case 1:open22();break; case 2:open23();break; } p2=(*p2).next; } } reborn() {if(mov1==0&&life1>0){draw(1,1,7);a1=1;b1=1;mov1=1;} if(mov2==0&&life2>0){draw(18,12,8);a2=18;b2=12;mov2=1;} } /**************************/ int main(void) { initgr(); /* BGI初始化 */ po1.next=&po1; po9.next=&po9; p1=&po1; p2=&po9; initpic(); while(1){getkey();broken1();broken2();reborn();} getch(); /* 暂停一下,看看前面绘图代码的运行结果 */ closegr(); /* 恢复TEXT屏幕模式 */ return 0; } /*----------badming--------------*/ |
|
|
|
21楼 学生成绩管理系统也许有些难懂,但不会是一点也看不懂. 其实在前面已经介绍了,本软件由一个主程序调用模块和五个功能模块(它们是:按键功能定义模块;图象文件读取功能模块;图形界面下汉字、字符共显功能模块;系统框架绘制模块;具体菜单功能实现模块)组成。 这几个模块中,按键功能定义模块,图象文件读取功能模块,图形界面下汉字、字符共显功能模块三个模块应该在编程中比较常见的,有个别地方我做了稍微改动,如果有这方面的基础完全可以轻松读懂. 另外系统框架绘制模块也没有什么技巧,顺着看基本就理解个差不多. 大家只需要注意的是具体菜单功能实现模块以及主程序调用模块这两部分.具体菜单功能实现模块中又包括," Open file"," New file"," Save file","Exit system"," Add object","Delete object","Modify object","File Print","Help Message"等9项功能的实现;另外还包括消息框显示功能,对话框显示功能,屏幕输入并回显功能,字符串转换成整数功能,将链表数据显示屏幕功能,开辟内存空间并保存掩盖图像功能,删除开辟的内存空间功能7项附加功能,这里面可能会有一点点小技巧,但如果仔细阅读,也是不很难理解的. 主程序调用模块我在可扩充性,易维护性等方面侧重了一点,对以后功能的扩充提供了方便. |
|
|
|
|
24楼 http://us.f3.yahoofs.com/users/43183dd8z6eddee68/ef3d/__sr_/cee8.jpg?phuPPGDB1AjV6uPU http://us.f3.yahoofs.com/users/43183dd8z6eddee68/ef3d/__sr_/2452.jpg?phBYPGDBbiNdoZbr |
|
|
|
|
25楼 6 数学 语文 英语 政治 物理 化学 1001 陈飞扬 100 60 77 90 88 76 1002 西门雪 98 80 69 56 65 87 1003 张金 81 84 75 68 77 91 1004 王一静 79 77 93 81 99 79 1005 许仙 88 99 80 87 66 99 1006 龙飞 60 67 55 95 81 53 1007 张三 83 81 77 69 65 78 1000 曹华 88 65 45 66 55 88 1111 Tom 98 55 86 69 66 99 1008 朱秀芝 80 67 82 90 90 34 0 score.txt文件中各数据说明: (第一个整数6表示共有6门功课) (数据排列依次是:学号 姓名 各科成绩) (最后的0表示结束标志) |
|
|
|
| 218.57.135.* |
26楼 |
|
|
| 218.57.135.* |
27楼 |
|
|
| 220.167.24.* |
29楼 身付异秉, 才思敏捷, 过目不忘, 十年寒窗, 博学多才, 见多识广, 才高八斗, 学富五车, 文武双全! |
|
|
