关于VB的课程设计
自己参照数据改一下应该就可以了。
#include /*引用库函数*/ 
#include 
#include 
#include 
typedef struct /*定义结构体数组*/ 
{ 
char num[10]; /*学号*/ 
char name[20]; /*姓名*/ 
int score; /*成绩*/ 
}Student; 
Student stu[80]; /*结构体数组变量*/ 
int menu_select() /*菜单函数*/ 
{ 
char c; 
do{ 
system("cls"); /*运行前清屏*/ 
printf("\t\t****Students' Grade Management System****\n"); /*菜单选择*/ 
printf("\t\t | 1. Input Records |\n"); 
printf("\t\t | 2. Display All Records |\n"); 
printf("\t\t | 3. Sort |\n"); 
printf("\t\t | 4. Insert a Record |\n"); 
printf("\t\t | 5. Delete a Record |\n"); 
printf("\t\t | 6. Query |\n"); 
printf("\t\t | 7. Statistic |\n"); 
printf("\t\t | 8. Add Records from a Text File|\n"); 
printf("\t\t | 9. Write to a Text file |\n"); 
printf("\t\t | 0. Quit |\n"); 
printf("\t\t*****************************************\n"); 
printf("\t\t\tGive your Choice(0-9):"); 
c=getchar(); /*读入选择*/ 
}while(c'9'); 
return(c-'0'); /*返回选择*/ 
} 
int Input(Student stud[],int n) /*输入若干条记录*/ 
{int i=0; 
char sign,x[10]; /*x[10]为清除多余的数据所用*/ 
while(sign!='n'&&sign!='N') /*判断*/ 
{ printf("\t\t\tstudent's num:"); /*交互输入*/ 
scanf("\t\t\t%s",stud[n+i].num); 
printf("\t\t\tstudent's name:"); 
scanf("\t\t\t%s",stud[n+i].name); 
printf("\t\t\tstudent's score:"); 
scanf("\t\t\t%d",&stud[n+i].score); 
gets(x); /*清除多余的输入*/ 
printf("\t\t\tany more records?(Y/N)"); 
scanf("\t\t\t%c",&sign); /*输入判断*/ 
i++; 
} 
return(n+i); 
} 
void Display(Student stud[],int n) /*显示所有记录*/ 
{ 
int i; 
printf("\t\t\t-----------------------------------\n"); /*格式头*/ 
printf("\t\t\tnumber name score\n"); 
printf("\t\t\t-----------------------------------\n"); 
for(i=1;i<n+1;i++) /*循环输入*/ 
{ 
printf("\t\t\t%-16s%-15s%d\n",stud[i-1].num,stud[i-1].name,stud[i-1].score); 
if(i>1&&i%10==0) /*每十个暂停*/ 
{printf("\t\t\t-----------------------------------\n"); /*格式*/ 
printf("\t\t\t"); 
system("pause"); 
printf("\t\t\t-----------------------------------\n"); 
} 
} 
printf("\t\t\t"); 
system("pause"); 
} 
void Sort_by_num(Student stud[],int n) /*按学号排序*/ 
{ int i,j,*p,*q,s; 
char t[10]; 
for(i=0;i<n-1;i++) /*冒泡法排序*/ 
for(j=0;j<n-1-i;j++) 
if(strcmp(stud[j].num,stud[j+1].num)>0) 
{strcpy(t,stud[j+1].num); 
strcpy(stud[j+1].num,stud[j].num); 
strcpy(stud[j].num,t); 
strcpy(t,stud[j+1].name); 
strcpy(stud[j+1].name,stud[j].name); 
strcpy(stud[j].name,t); 
p=&stud[j+1].score; 
q=&stud[j].score; 
s=*p; 
*p=*q; 
*q=s; 
} 
} 
int Insert_a_record(Student stud[],int n) /*插入一条记录*/ 
{char x[10]; /*清除多余输入所用*/ 
printf("\t\t\tstudent's num:"); /*交互式输入*/ 
scanf("\t\t\t%s",stud[n].num); 
printf("\t\t\tstudent's name:"); 
scanf("\t\t\t%s",stud[n].name); 
printf("\t\t\tstudent's score:"); 
scanf("\t\t\t%d",&stud[n].score); 
gets(x); 
n++; 
Sort_by_num(stud,n); /*调用排序函数*/ 
printf("\t\t\tInsert Successed!\n"); /*返回成功信息*/ 
return(n); 
} 
int Delete_a_record(Student stud[],int n) /*按姓名查找,删除一条记录*/ 
{ char s[20]; 
int i=0,j; 
printf("\t\t\ttell me his(her) name:"); /*交互式问寻*/ 
scanf("%s",s); 
while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判断*/ 
if(i==n) 
{ printf("\t\t\tnot find!\n"); /*返回失败信息*/ 
return(n); 
} 
for(j=i;j<n-1;j++) /*删除操作*/ 
{ 
strcpy(stud[j].num,stud[j+1].num); 
strcpy(stud[j].name,stud[j+1].name); 
stud[j].score=stud[j+1].score; 
} 
printf("\t\t\tDelete Successed!\n"); /*返回成功信息*/ 
return(n-1); 
} 
void Query_a_record(Student stud[],int n) /*查找并显示一个记录*/ 
{ char s[20]; 
int i=0; 
printf("\t\t\tinput his(her) name:"); /*交互式输入*/ 
scanf("\t\t\t%s",s); 
while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判断*/ 
if(i==n) 
{ printf("\t\t\tnot find!\n"); /*输入失败信息*/ 
return; 
} 
printf("\t\t\this(her) number:%s\n",stud[i].num); /*输出该学生信息*/ 
printf("\t\t\this(her) score:%d\n",stud[i].score); 
} 
void Statistic(Student stud[],int n) /*新增功能,输出统计信息*/ 
{ int i,j=0,k=0,sum=0; 
float aver; /*成绩平均值*/ 
for(i=0;i<n;i++) /*循环输入判断*/ 
{ 
sum+=stud[i].score; 
if(stud[j].score>stud[i].score) j=i; 
if(stud[k].score<stud[i].score) k=i; 
} 
aver=1.0*sum/n; 
printf("\t\t\tthere are %d records.\n",n); /*总共记录数*/ 
printf("\t\t\tthe hignest score:\n"); /*最高分*/ 
printf("\t\t\tnumber:%s name:%s score:%d\n",stud[j].num,stud[j].name,stud[j].score); 
printf("\t\t\tthe lowest score:\n"); /*最低分*/ 
printf("\t\t\tnumber:%s name:%s score:%d\n",stud[k].num,stud[k].name,stud[k].score); 
printf("\t\t\tthe average score is %5.2f\n",aver); /*平均分*/ 
} 
int AddfromText(Student stud[],int n) /*从文件中读入数据*/ 
{ int i=0,num; 
FILE *fp; /*定义文件指针*/ 
char filename[20]; /*定义文件名*/ 
printf("\t\t\tInput the filename:"); 
scanf("\t\t\t%s",filename); /*输入文件名*/ 
if((fp=fopen(filename,"rb"))==NULL) /*打开文件*/ 
{ printf("\t\t\tcann't open the file\n"); /*打开失败信息*/ 
printf("\t\t\t"); 
system("pause"); 
return(n); 
} 
fscanf(fp,"%d",&num); /*读入总记录量*/ 
while(i<num) /*循环读入数据*/ 
{ 
fscanf(fp,"%s%s%d",stud[n+i].num,stud[n+i].name,&stud[n+i].score); 
i++; 
} 
n+=num; 
fclose(fp); /*关闭文件*/ 
printf("\t\t\tSuccessed!\n"); 
printf("\t\t\t"); 
system("pause"); 
return(n); 
} 
void WritetoText(Student stud[],int n) /*将所有记录写入文件*/ 
{ 
int i=0; 
FILE *fp; /*定义文件指针*/ 
char filename[20]; /*定义文件名*/ 
printf("\t\t\tWrite Records to a Text File\n"); /*输入文件名*/ 
printf("\t\t\tInput the filename:"); 
scanf("\t\t\t%s",filename); 
if((fp=fopen(filename,"w"))==NULL) /*打开文件*/ 
{ 
printf("\t\t\tcann't open the file\n"); 
system("pause"); 
return; 
} 
fprintf(fp,"%d\n",n); /*循环写入数据*/ 
while(i<n) 
{ 
fprintf(fp,"%-16s%-15s%d\n",stud[i].num,stud[i].name,stud[i].score); 
i++; 
} 
fclose(fp); /*关闭文件*/ 
printf("Successed!\n"); /*返回成功信息*/ 
} 
void main() /*主函数*/ 
{ 
int n=0; 
for(;;) 
{ 
switch(menu_select()) /*选择判断*/ 
{ 
case 1: 
printf("\t\t\tInput Records\n"); /*输入若干条记录*/ 
n=Input(stu,n); 
break; 
case 2: 
printf("\t\t\tDisplay All Records\n"); /*显示所有记录*/ 
Display(stu,n); 
break; 
case 3: 
printf("\t\t\tSort\n"); 
Sort_by_num(stu,n); /*按学号排序*/ 
printf("\t\t\tSort Suceessed!\n"); 
printf("\t\t\t"); 
system("pause"); 
break; 
case 4: 
printf("\t\t\tInsert a Record\n"); 
n=Insert_a_record(stu,n); /*插入一条记录*/ 
printf("\t\t\t"); 
system("pause"); 
break; 
case 5: 
printf("\t\t\tDelete a Record\n"); 
n=Delete_a_record(stu,n); /*按姓名查找,删除一条记录*/ 
printf("\t\t\t"); 
system("pause"); 
break; 
case 6: 
printf("\t\t\tQuery\n"); 
Query_a_record(stu,n); /*查找并显示一个记录*/ 
printf("\t\t\t"); 
system("pause"); 
break; 
case 7: 
printf("\t\t\tStatistic\n"); 
Statistic(stu,n); /*新增功能,输出统计信息*/ 
printf("\t\t\t"); 
system("pause"); 
break; 
case 8: 
printf("\t\t\tAdd Records from a Text File\n"); 
n=AddfromText(stu,n); /*新增功能,输出统计信息*/ 
break; 
case 9: 
printf("\t\t\tWrite to a Text file\n"); 
WritetoText(stu,n); /*循环写入数据*/ 
printf("\t\t\t"); 
system("pause"); 
break; 
case 0: 
printf("\t\t\tHave a Good Luck,Bye-bye!\n"); /*结束程序*/ 
printf("\t\t\t"); 
system("pause"); 
exit(0); 
} 
} 
} 
四、函数调用关系图 
注:“→”代表调用 
Input函数 
打印链表记录 
Display函数 
输入若干条记录 
menu_select()函数 
选择菜单 
Sort_by_num函数 
显示所有记录 
Delete_a_record函数 
按姓名查找,删除一条记录 
Query_a_record查找并显示一条记录 
Statistic函数 
输出统计信息 (新增) 
AddfromText函数 
从正文中添加数据到结构体数组中 
Main函数 
Insert_a_record插入一条记录 
WritetoText函数 将所有数据写入文件中 
退出程序 
Reverse(head)函数 
按学号排序 
五、设计测试流程 
1、进入界面 
2、输入选项1,回车; 
按提示输入数据: 
3、回到主菜单; 
输入选项7,回车; 
输入文件名:data.txt,回车; 
出现成功提示,则读入文件操作成功。 
4、回到主菜单,输入2,回车 
每10个暂停显示数据 
5、回到主菜单,输入3,回车 
出现排序成功信息。 
6、回到主菜单,输入4,回车 
按提示插入一组数据 
7、回到主菜单,输入5,回车 
按提示输入姓名,删除数据 
出现删除成功的信息 
8、回到主菜单,输入6,回车 
输入姓名进行查询 
9、回到主菜单,输入7,回车 
出现统计信息 
10、回到主菜单,输入9,回车 
输入result.txt,回车 
出现成功写入文件的信息 
11、回到主菜单,输入0,回车退出系统 
回答者:kingkey001 - 试用期 一级 7-14 22:38
       修改答复: kingkey001,您要修改的答复如下: 积分规则 关闭 
C语言课程设计报告-------学生成绩简单管理程序
一、系统菜单的主要功能
(1)输入若干条记录
(2)显示所有记录
(3)按学号排序
(4)插入一条记录
(5)按姓名查找,删除一条记录
(6)查找并显示一条记录
(7)输出统计信息 (新增)
(8)从正文中添加数据到结构体数组中
(9)将所有数据写入文件中
(0)退出程序
二、题目分析
该题主要考察学生对结构体,指针,文件的操作,以及C语言算法的掌握,所以完成此道题目要求较强的设计能力,尤其是要有一种大局观的意识。如何调程序也非常重要,通过这个程序可以学习到以前调试短程序没有的的经验。
菜单中的每一个选项都对应一个子程序,子程序的算法几乎囊获了所有C语言学过的技巧,下面就各个子程序中的功能进行说明:
功能1和4的算法相似,输入一条记录到结构体中去,其中有一部很关键,就是通过gets将所有的多余的字符,回车读去,否则就会出错。
功能2是显示所有的记录,通过循环输出,格式也比较重要。
功能3为按学号排序,因为学号定义成了字符数组的形式,因此在运用冒泡法进行排序的时候,要用到strcmp,strcpy等函数。
功能5为按姓名删除记录,先输入姓名,再一一比较,如果没有则返回失败信息,如果找到就将此记录都向前移一位,返回n-1。
功能6的算法在5中就已经体现了,输入姓名,一一比较。
功能7为新增的功能,因为考虑到原来给出的函数中竟然没有对学生成绩的统计功能,因此新增此功能,可以得出所有的记录个数,最高、最低、平均分,并输出相关的学生信息等。
功能8和9是对文件的操作,提前准备好数据。
三、程序正文部分
#include  /*引用库函数*/
#include
#include
#include
typedef struct                /*定义结构体数组*/
{
   char num[10];               /*学号*/
   char name[20];              /*姓名*/
   int score;             /*成绩*/
}Student;
Student stu[80];             /*结构体数组变量*/
int menu_select()           /*菜单函数*/
{
   char c;
   do{
           system("cls");              /*运行前清屏*/
            printf("\t\t****Students' Grade Management System****\n");            /*菜单选择*/
            printf("\t\t    | 1. Input Records             |\n");
            printf("\t\t    | 2. Display All Records                |\n");
            printf("\t\t    | 3. Sort    |\n");
            printf("\t\t    | 4. Insert a Record                |\n");
            printf("\t\t    | 5. Delete a Record            |\n");
            printf("\t\t    | 6. Query    |\n");
            printf("\t\t    | 7. Statistic                 |\n");
            printf("\t\t    | 8. Add Records from a Text File|\n");
            printf("\t\t    | 9. Write to a Text file          |\n");
            printf("\t\t    | 0. Quit   |\n");
            printf("\t\t*****************************************\n");
            printf("\t\t\tGive your Choice(0-9):");
            c=getchar(); /*读入选择*/
   }while(c'9');
   return(c-'0'); /*返回选择*/
}
int Input(Student stud[],int n) /*输入若干条记录*/
{int i=0;
char sign,x[10];            /*x[10]为清除多余的数据所用*/
while(sign!='n'&&sign!='N')          /*判断*/
{    printf("\t\t\tstudent's num:");                 /*交互输入*/
    scanf("\t\t\t%s",stud[n+i].num);
    printf("\t\t\tstudent's name:");
    scanf("\t\t\t%s",stud[n+i].name);
    printf("\t\t\tstudent's score:");
    scanf("\t\t\t%d",&stud[n+i].score);
    gets(x);              /*清除多余的输入*/
    printf("\t\t\tany more records?(Y/N)");
    scanf("\t\t\t%c",&sign);                /*输入判断*/
    i++;
}
return(n+i);
}
void Display(Student stud[],int n)            /*显示所有记录*/
{
int i;
printf("\t\t\t-----------------------------------\n");          /*格式头*/
printf("\t\t\tnumber          name          score\n");
printf("\t\t\t-----------------------------------\n");
for(i=1;i<n+1;i++)                /*循环输入*/
{
   printf("\t\t\t%-16s%-15s%d\n",stud[i-1].num,stud[i-1].name,stud[i-1].score);
   if(i>1&&i%10==0)               /*每十个暂停*/
            {printf("\t\t\t-----------------------------------\n"); /*格式*/
             printf("\t\t\t");
             system("pause");
             printf("\t\t\t-----------------------------------\n");
            }
}
printf("\t\t\t");
system("pause");
}
void Sort_by_num(Student stud[],int n)            /*按学号排序*/
{   int i,j,*p,*q,s;
   char t[10];
   for(i=0;i<n-1;i++) /*冒泡法排序*/
            for(j=0;j<n-1-i;j++)
     if(strcmp(stud[j].num,stud[j+1].num)>0)
     {strcpy(t,stud[j+1].num);
      strcpy(stud[j+1].num,stud[j].num);
      strcpy(stud[j].num,t);
      strcpy(t,stud[j+1].name);
      strcpy(stud[j+1].name,stud[j].name);
      strcpy(stud[j].name,t);
      p=&stud[j+1].score;
      q=&stud[j].score;
      s=*p;
      *p=*q;
      *q=s;
     }
}
int Insert_a_record(Student stud[],int n)            /*插入一条记录*/
{char x[10];          /*清除多余输入所用*/
   printf("\t\t\tstudent's num:");  /*交互式输入*/
   scanf("\t\t\t%s",stud[n].num);
   printf("\t\t\tstudent's name:");
   scanf("\t\t\t%s",stud[n].name);
   printf("\t\t\tstudent's score:");
   scanf("\t\t\t%d",&stud[n].score);
   gets(x);
   n++;
   Sort_by_num(stud,n);           /*调用排序函数*/
   printf("\t\t\tInsert Successed!\n");           /*返回成功信息*/
   return(n);
}
int Delete_a_record(Student stud[],int n)           /*按姓名查找,删除一条记录*/
{  char s[20];
   int i=0,j;
   printf("\t\t\ttell me his(her) name:");                 /*交互式问寻*/
   scanf("%s",s);
   while(strcmp(stud[i].name,s)!=0&&i<n) i++;           /*查找判断*/
   if(i==n)
   {         printf("\t\t\tnot find!\n");              /*返回失败信息*/
             return(n);
            }
   for(j=i;j<n-1;j++)  /*删除操作*/
            {
             strcpy(stud[j].num,stud[j+1].num);
             strcpy(stud[j].name,stud[j+1].name);
             stud[j].score=stud[j+1].score;
            }
   printf("\t\t\tDelete Successed!\n");          /*返回成功信息*/
   return(n-1);
}
void Query_a_record(Student stud[],int n)                 /*查找并显示一个记录*/
{  char s[20];
   int i=0;
   printf("\t\t\tinput his(her) name:");  /*交互式输入*/
   scanf("\t\t\t%s",s);
   while(strcmp(stud[i].name,s)!=0&&i<n) i++;           /*查找判断*/
   if(i==n)
   {     printf("\t\t\tnot find!\n");              /*输入失败信息*/
         return;
   }
   printf("\t\t\this(her) number:%s\n",stud[i].num);                /*输出该学生信息*/
   printf("\t\t\this(her) score:%d\n",stud[i].score);
}
void Statistic(Student stud[],int n)            /*新增功能,输出统计信息*/
{  int i,j=0,k=0,sum=0;
   float aver;            /*成绩平均值*/
   for(i=0;i<n;i++)            /*循环输入判断*/
            {
             sum+=stud[i].score;
             if(stud[j].score>stud[i].score) j=i;
             if(stud[k].score<stud[i].score) k=i;
            }
   aver=1.0*sum/n;
   printf("\t\t\tthere are %d records.\n",n);            /*总共记录数*/
   printf("\t\t\tthe hignest score:\n");           /*最高分*/
   printf("\t\t\tnumber:%s   name:%s   score:%d\n",stud[j].num,stud[j].name,stud[j].score);
   printf("\t\t\tthe lowest score:\n");            /*最低分*/
   printf("\t\t\tnumber:%s   name:%s   score:%d\n",stud[k].num,stud[k].name,stud[k].score);
   printf("\t\t\tthe average score is %5.2f\n",aver); /*平均分*/
}
int AddfromText(Student stud[],int n)               /*从文件中读入数据*/
{  int i=0,num;
   FILE *fp;            /*定义文件指针*/
   char filename[20]; /*定义文件名*/
   printf("\t\t\tInput the filename:");
   scanf("\t\t\t%s",filename);              /*输入文件名*/
   if((fp=fopen(filename,"rb"))==NULL)             /*打开文件*/
  {  printf("\t\t\tcann't open the file\n"); /*打开失败信息*/
     printf("\t\t\t");
     system("pause");
     return(n);
   }
     fscanf(fp,"%d",&num); /*读入总记录量*/
   while(i<num)                /*循环读入数据*/
   {
            fscanf(fp,"%s%s%d",stud[n+i].num,stud[n+i].name,&stud[n+i].score);
            i++;
                }
   n+=num;
   fclose(fp);           /*关闭文件*/
   printf("\t\t\tSuccessed!\n");
   printf("\t\t\t");
   system("pause");
   return(n);
}
void WritetoText(Student stud[],int n)               /*将所有记录写入文件*/
{
int i=0;
FILE *fp;           /*定义文件指针*/
char filename[20];                 /*定义文件名*/
   printf("\t\t\tWrite Records to a Text File\n");             /*输入文件名*/
   printf("\t\t\tInput the filename:");
   scanf("\t\t\t%s",filename);
   if((fp=fopen(filename,"w"))==NULL)             /*打开文件*/
            {
     printf("\t\t\tcann't open the file\n");
     system("pause");
     return;
            }
               fprintf(fp,"%d\n",n);             /*循环写入数据*/
   while(i<n)
   {
            fprintf(fp,"%-16s%-15s%d\n",stud[i].num,stud[i].name,stud[i].score);
            i++;
               }
   fclose(fp);           /*关闭文件*/
   printf("Successed!\n");          /*返回成功信息*/
}
void main()           /*主函数*/
{
int n=0;
   for(;;)
   {
            switch(menu_select())           /*选择判断*/
            {
            case 1:
     printf("\t\t\tInput Records\n");                /*输入若干条记录*/
     n=Input(stu,n);
     break;
            case 2:
     printf("\t\t\tDisplay All Records\n");                /*显示所有记录*/
     Display(stu,n);
     break;
            case 3:
     printf("\t\t\tSort\n");
     Sort_by_num(stu,n);             /*按学号排序*/
     printf("\t\t\tSort Suceessed!\n");
     printf("\t\t\t");
     system("pause");
     break;
            case 4:
     printf("\t\t\tInsert a Record\n");
     n=Insert_a_record(stu,n);               /*插入一条记录*/
     printf("\t\t\t");
     system("pause");
     break;
            case 5:
     printf("\t\t\tDelete a Record\n");
     n=Delete_a_record(stu,n);              /*按姓名查找,删除一条记录*/
     printf("\t\t\t");
     system("pause");
     break;
            case 6:
     printf("\t\t\tQuery\n");
     Query_a_record(stu,n); /*查找并显示一个记录*/
     printf("\t\t\t");
     system("pause");
     break;
            case 7:
     printf("\t\t\tStatistic\n");
     Statistic(stu,n);             /*新增功能,输出统计信息*/
     printf("\t\t\t");
     system("pause");
     break;
            case 8:
     printf("\t\t\tAdd Records from a Text File\n");
     n=AddfromText(stu,n); /*新增功能,输出统计信息*/
     break;
            case 9:
     printf("\t\t\tWrite to a Text file\n");
     WritetoText(stu,n);                /*循环写入数据*/
     printf("\t\t\t");
     system("pause");
     break;
            case 0:
     printf("\t\t\tHave a Good Luck,Bye-bye!\n");           /*结束程序*/
     printf("\t\t\t");
     system("pause");
     exit(0);
            }
   }
}
四、函数调用关系图
注:“→”代表调用
Input函数
打印链表记录
Display函数
输入若干条记录
menu_select()函数
选择菜单
Sort_by_num函数    
显示所有记录
Delete_a_record函数
按姓名查找,删除一条记录
Query_a_record查找并显示一条记录
Statistic函数
输出统计信息 (新增)
AddfromText函数
从正文中添加数据到结构体数组中
   Main函数
Insert_a_record插入一条记录
WritetoText函数    将所有数据写入文件中
退出程序
Reverse(head)函数
按学号排序
五、设计测试流程
1、进入界面
2、输入选项1,回车;
  按提示输入数据:
3、回到主菜单;
  输入选项7,回车;
   输入文件名:data.txt,回车;
   出现成功提示,则读入文件操作成功。
   4、回到主菜单,输入2,回车
          每10个暂停显示数据
5、回到主菜单,输入3,回车
   出现排序成功信息。
6、回到主菜
求篇VB程序设计的实验报告
Private Sub Command1_Click() Dim str As String str = MsgBox("Are you continue to?", vbAbortRetryIgnore Or vbDefaultButton1 Or vbQuestion, "功能测试") Select Case str Case vbAbort MsgBox "3", , "功能测试" Case vbRetry MsgBox "4", , "功能测试" Case vbIgnore MsgBox "5", , "功能测试" End Select End Sub
求vb课程设计??
步骤一:绘制界面。 
新建一个标准EXE工程,将其Caption属性改为“超级记事本”,点击Icon属性给它找个合适的Icon图标。单击菜单“工程”-“部件”,在弹出的“部件”对话框里找到Microsoft RichText Box 6.0和公共对话框Microsoft Common Dialog 6.0并选中它们,单击“确定”按钮。这时左边的工具栏上出现了我们刚才新添的两个控件了。在窗体上绘制RichText Box和Commn Dialog,其中RichText Box的大小和位置可不用理睬,我们将在代码中处理它,当然,有必要把它的ScrollBar属性设为2-rtfVertical,这样在打开和编辑文件时垂直滚动条才可用。 
步骤二:编辑菜单。 
按Ctrl+E调出菜单编辑器,我们来做如下几个菜单: 
一.文件菜单: 
文件(第一层) mnuFile 
新建(第二层) mnuNew 
打开(第二层) mnuOpen 
保存(第二层) mnuSave 
- (第二层) mnuFileSep (分隔线) 
退出(第二层) mnuExit 
二.编辑菜单: 
编辑(第一层) mnuEdit 
复制(第二层) mnuCopy 
剪切(第二层) mnuCut 
粘贴(第二层) mnuPaste 
- (第二层) mnuEditSep (分隔线) 
全选(第二层) mnuSelecAll 
三.搜索菜单: 
搜索(第一层) mnuSearch 
查找(第二层) mnuFind 
查找下一个(第二层) mnuFindOn 
四.帮助菜单: 
帮助(第一层) mnuHelp 
使用说明(第二层) mnuUsage 
关于(第二层) mnuAbout 
(注:各菜单项的快捷键请自行设置) 
好了,其它的菜单项以后再根据需要添加。现在进入: 
步骤三:编写代码。 
'声明查找变量 
Dim sFind As String 
'声明文件类型 
Dim FileType, FiType As String 
'初始化程序 
Private Sub Form_Load() 
'设置程序启动时的大小 
Me.Height = 6000 
Me.Width = 9000 
End Sub 
'设置编辑框的位置和大小 
Private Sub Form_Resize() 
On Error Resume Next '出错处理 
RichTextBox1.Top=20 
RichTextBox1.Left=20 
RichTextBox1.Height = ScaleHeight-40 
RichTextBox1.Width = ScaleWidth-40 
End Sub 
'新建文件 
Private Sub mnuNew_Click() 
RichTextBox1.Text = "" '清空文本框 
FileName = "未命名" 
Me.Caption = FileName 
End Sub 
'打开文件 
Private Sub mnuOpen_Click() 
CommonDialog1.Filter = "文本文档(*.txt)|*.txt|RTF文档(*.rtf)|*.rtf|所有文件(*.*)|*.*" 
CommonDialog1.ShowOpen 
RichTextBox1.Text = "" '清空文本框 
FileName = CommonDialog1.FileName 
RichTextBox1.LoadFile FileName 
Me.Caption = "超级记事本:" & FileName 
End Sub 
'保存文件 
Private Sub mnuSave_Click() 
CommonDialog1.Filter = "文本文档(*.txt)|*.txt|RTF文档(*.rtf)|*.rtf|所有文件(*.*)|*.*" 
CommonDialog1.ShowSave 
FileType = CommonDialog1.FileTitle 
FiType = LCase(Right(FileType, 3)) 
FileName = CommonDialog1.FileName 
Select Case FiType 
Case "txt" 
RichTextBox1.SaveFile FileName, rtfText 
Case "rtf" 
RichTextBox1.SaveFile FileName, rtfRTF 
Case "*.*" 
RichTextBox1.SaveFile FileName 
End Select 
Me.Caption = "超级记事本:" & FileName 
End Sub 
'退出 
Private Sub mnuExit_Click() 
End 
End Sub 
'复制 
Private Sub mnuCopy_Click() 
Clipboard.Clear 
Clipboard.SetText RichTextBox1.SelText 
End Sub 
'剪切 
Private Sub mnuCut_Click() 
Clipboard.Clear 
Clipboard.SetText RichTextBox1.SelText 
RichTextBox1.SelText = "" 
End Sub 
'全选 
Private Sub mnuSelectAll_Click() 
RichTextBox1.SelStart = 0 
RichTextBox1.SelLength = Len(RichTextBox1.Text) 
End Sub 
'粘贴 
Private Sub mnuPaste_Click() 
RichTextBox1.SelText = Clipboard.GetText 
End Sub 
'查找 
Private Sub mnuFind_Click() 
sFind = InputBox("请输入要查找的字、词:", "查找内容", sFind) 
RichTextBox1.Find sFind 
End Sub 
'继续查找 
Private Sub mnuFindOn_Click() 
RichTextBox1.SelStart = RichTextBox1.SelStart + RichTextBox1.SelLength + 1 
RichTextBox1.Find sFind, , Len(RichTextBox1) 
End Sub 
'使用说明 
Private Sub mnuReadme_Click() 
On Error GoTo handler 
RichTextBox1.LoadFile "Readme.txt", rtfText '请写好Readme.txt文件并存入程序所在文件夹中 
Me.Caption = "超级记事本:" & "使用说明" 
Exit Sub 
handler: 
MsgBox "使用说明文档可能已经被移除,请与作者联系。", vbOKOnly, " 错误信息" 
End Sub 
'关于 
Private Sub mnuAbout_Click() 
MsgBox "超级记事本 Ver1.0 版权所有(C) 2001 土人",vbOKOnly,"关于" 
End Sub 
'设置弹出式菜单(即在编辑框中单击鼠标右键时弹出的动态菜单) 
Private Sub RichTextBox1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) 
If Button = 2 Then 
PopupMenu mnuEdit, vbPopupMenuLeftAlign 
Else 
Exit Sub 
End If 
End Sub 
'防止在切换输入法时字体自变(感谢王必成先生提供此方案) 
Private Sub RichTextBox1_KeyUp(KeyCode As Integer, Shift As Integer) 
If KeyCode = vbKeySpace Then 
RichTextBox1.SelFontName = CommonDialog1.FontName 
End If 
End Sub 
至此,我们的记事本可以编译使用了。点击菜单“文件”-“生成XXX.EXE”,回到桌面运行我们的记事本看看,是不是颇有成就感? 
当然,这样的记事本还比较粗糙,我们还需要做些工作,请看下一章。 
第二章 美化程序界面 
多数字处理软件都有工具栏和状态栏。工具栏和状态栏除了能美化我们的程序使其更具有专业性质外,还给用户带来操作上的便利。现在我们就来做一做这两样东西。 
一.工具栏 
(一)制作工具栏 
单击“工程”-“部件”,选中Microsoft Windows Common Control 6.0并确定。这时,我们要用到的控件就出现在左边的工具栏上了。 
要做工具栏,首先需要一个叫ImageList的控件来装载图像。在程序界面上添加它,然后右键单击此控件,左键单击“属性”,弹出“属性页”对话框的“图像”,再单击“插入图片”就可以一次性装载图片了(如不满意,以后还可以添加)。图片可在C:\Microsoft Visual Studio\Common\Graphics\Bitmaps\TlBr_W95下选择(这里假设你的VB安装在C盘下)。注意了:在插入图片时给每一张图片注明关键字,以便在引用图片时不至于混乱。如插入“新建”的图片,我们在“关键字”栏注明“New”。 
图片有了,接下来在程序界面添加工具栏(ToolBar)。添加后工具栏就出现在菜单下面,右键单击它,选择“属性”,在弹出的“属性页”对话框中的“通用”项作些设置,主要如下两项: 
1.“图像列表”:选择ImageList1 
2.“样式”:根据喜爱选择1-trbStandard或者2-trbFlat 
继续点击“属性页”的“按钮”选项,插入若干按钮。按钮有多种样式,请根据需要设置。这里请一定注意:每一个与用户操作有关的按钮都必须注明关键字、装载图片,如“新建”按钮,在“关键字”项注明“新建”,在“图像”项键入“New”(即ImageList1中的图片关键字),需要的话还可以在“工具提示文本”项填入适当的提示语。 
(二)编写工具栏的按钮代码 
工具栏按钮的代码编辑很简单,可以按照下面的格式去编写: 
Private Sub ToolBar1_ButtonClick(ByVal Button As MSComctlLib.Button) 
On Error Resume Next '出错处理 
Select Case Button.Key '按关键字选择 
Case "新建" 
mnuNew_Click '等于菜单项“新建”被单击 
Case "打开" '等于菜单项“打开”被单击 
mnuOpen_Click 
'......(继续编写其它按钮的代码) 
End Select 
End Sub 
完成后试运行一下我们的程序,我们发现,有了工具栏之后,程序变得漂亮多了,只是有一个问题:打开一个较长的文档后,编辑框的下拉滚动条向上的箭头不见了。原因是:工具条占用一定的空间。解决方法:将“设置编辑框的位置和大小”中的RichTextBox1.Top = 20 和 RichTextBox1.Height = Me.ScaleHeight - 40分别改为RichTextBox1.Top = 380,RichTextBox1.Height = Me.ScaleHeight - 400即可。 
二.状态栏 
(一)制作状态栏 
状态栏的英文名字叫StatusBar,在窗体上添加它后会默认出现在窗体的最下方。用鼠标右键点击它,调出“属性页”对话框,单击“窗格”项,插入一些窗格,可以将各个窗格的“样式”设置为: 
0-sbrText 显示文本,需编写代码 
1-sbrCaps 显示大小写状态,无需编程 
2-sbrNum 显示NumLock键开关状态,无需编程 
3-sbrIns 显示Insert键状态,无需编程 
4-sbrScr1 
5-sbrTime 显示时间,不编程时时间不会随系统时钟变化 
6-sbrDate 显示日期,无需编程 
注意:加进状态栏后需将Form_Resze中的RichTextBox1.Height = Me.ScaleHeight - 400改为RichTextBox1.Height = Me.ScaleHeight - 600。 
(二)状态栏根据其“样式”属性决定用不用编写代码(如上文所述)。下面举些例子,读者可以认真揣摩,从而达到举一反三的效果。 
例一:用户选取了“新建”后,让第一个窗格显示:“目前状态:正在打开文件《……》”。请将下面代码写进“打开”菜单里面: 
StatusBar1.Panels(1).Text = "目前状态:正在打开文件" & "《" &CommonDialog1.FileTitle & "》" 
例二:让第三个窗格显示时间并让时间跟随系统时钟变化。 
首先,给程序加一个Timer控件,将其Interval属性设为1000。然后: 
在Form_Load过程加入:StatusBar1.Panels(1).Text = Time;然后给Timer控件编写代码: 
Private Sub Timer1_Timer() 
If StatusBar1.Panels(3).Text  CStr(Time) Then 
StatusBar1.Panels(3).Text = Time 
End If 
End Sub 
例三:当编辑框的文本发生变化时让第一个窗格显示:“正在编辑文档:文件名”。 
Private Sub RichTextBox1_Chang() 
StatusBar1.Panels(1).Text = "正在编辑文档:" & CommonDialog1.FileName 
End Sub
