vb課程設計
⑴ 急求一個VB課程設計計算器的完整代碼,最好有個人做好了給我,萬分感謝
什麼叫做「課程設計計算器」?
⑵ VB課程設計 題目如圖VB VB VB
界面你自已做一下了,源代碼如下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
Option Explicit
Dim Board(0 To 18, 0 To 18) As Byte '此數組標識棋盤上每個點是否有子:0 無子,1 黑,2 白子
Dim lastnum As Integer '最新放置棋子的位置號
Const HDist As Integer = 250
Const VDist As Integer = 800
Const Grid As Integer = 250
Private Sub cmdRemoveBlack_Click() '移除黑子
Dim i As Integer
For i = 0 To 360
If Board(i Mod 19, i \ 19) = 1 Then Board(i Mod 19, i \ 19) = 0: shpChess(i).Visible = False
Next
Call CountChess
End Sub
Private Sub cmdRemoveWhite_Click() '移除白子
Dim i As Integer
For i = 0 To 360
If Board(i Mod 19, i \ 19) = 2 Then Board(i Mod 19, i \ 19) = 0: shpChess(i).Visible = False
Next
Call CountChess
End Sub
Private Sub cmdUndo_Click() '撤消最後一步
shpChess(lastnum).Visible = False
Board(lastnum Mod 19, lastnum \ 19) = 0
Call CountChess
End Sub
Private Sub Command1_Click()
Unload Me
End Sub
Private Sub Form_Load()
'窗體載入時,使用直線控制項數組生成19*19的圍棋盤
Dim i As Integer
Randomize
'生成橫線
For i = 1 To 18
Load LinH(i)
Next
For i = 0 To 18
LinH(i).Visible = True
LinH(i).X1 = HDist
LinH(i).Y1 = VDist + Grid * i
LinH(i).Y2 = VDist + Grid * i
LinH(i).X2 = HDist + Grid * 18
Next
'生成豎線
For i = 1 To 18
Load LinV(i)
Next
For i = 0 To 18
LinV(i).Visible = True
LinV(i).Y1 = VDist
LinV(i).X1 = HDist + Grid * i
LinV(i).Y2 = VDist + Grid * 18
LinV(i).X2 = HDist + Grid * i
Next
'生成棋子
For i = 1 To 360
Load shpChess(i)
shpChess(i).FillStyle = 0
shpChess(i).FillColor = vbWhite
Next
For i = 0 To 360
shpChess(i).Top = (i \ 19) * Grid + VDist - 100
shpChess(i).Left = (i Mod 19) * Grid + HDist - 100
shpChess(i).Visible = True
Next
'讀取已存的棋局
If Dir("save.txt") <> "" Then
Open "save.txt" For Input As #1
For i = 0 To 360
Input #1, Board(i Mod 19, i \ 19)
Next
Close
End If
Call CountChess
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim i As Integer
Dim j As Integer
'計算行列
i = (X - HDist) / Grid
j = (Y - VDist) / Grid
'防止下標越界
If i > 18 Then i = 18
If i < 0 Then i = 0
If j > 18 Then j = 18
If j < 0 Then j = 0
If Shift = 0 Then '加子
lastnum = j * 19 + i
If Board(i, j) = 0 Then
Select Case Button
Case 1
shpChess(lastnum).FillColor = vbBlack
Board(i, j) = 1
Case 2
shpChess(lastnum).FillColor = vbWhite
Board(i, j) = 2
End Select
shpChess(lastnum).Visible = True
Else
MsgBox "此處有子,不能落子。"
End If
ElseIf Shift = 2 Then '按住Ctrl鍵去子
If Board(i, j) <> 0 Then
Select Case Button
Case 1
If Board(i, j) = 1 Then
shpChess(i + 19 * j).Visible = False
Board(i, j) = 0
End If
Case 2
If Board(i, j) = 2 Then
shpChess(i + 19 * j).Visible = False
Board(i, j) = 0
End If
End Select
Else
MsgBox "此處無子,不能提子。"
End If
End If
Call CountChess
End Sub
'退出時,保存當前棋局
Private Sub Form_Unload(Cancel As Integer)
Open "save.txt" For Output As #1
Dim i As Integer
For i = 0 To 360
Write #1, Board(i Mod 19, i \ 19),
Next
Close #1
End Sub
Private Sub Timer1_Timer()
Static i As Integer
Dim j As Integer
If i = 0 Then
For j = 0 To 360
shpChess(j).FillColor = vbBlack
Next
i = i + 1
Else
For j = 0 To 360
If Board(j Mod 19, j \ 19) = 1 Then
shpChess(j).FillColor = vbBlack
ElseIf Board(j Mod 19, j \ 19) = 2 Then
shpChess(j).FillColor = vbWhite
Else
shpChess(j).Visible = False
End If
Next
Timer1.Enabled = False
End If
End Sub
Sub CountChess()
Dim total As Byte, black As Byte, white As Byte
Dim i As Integer
Dim j As Integer
For i = 0 To 18
For j = 0 To 18
If Board(i, j) = 1 Then
black = black + 1
ElseIf Board(i, j) = 2 Then
white = white + 1
End If
Next
Next
txtBlack.Text = black
txtWhite.Text = white
txtTotal.Text = black + white
If total = 361 Then MsgBox "Game Over"
End Sub
⑶ vb課程設計心得體會
VB課程設計要求
1、每位同學自行選擇一個題目進行設計,不得雷同。也可自己提回出設計題目,要答預先取得老師的同意。
2、題目後面是每個題目的每班限值人數。
3、題目工作量較大時,可結組完成,但要預先取得老師的同意。
4、設計後期,應寫出設計報告,包括:題目內容、演算法說明、程序變數使用說明、解決方法、創新點及對設計所包含的知識點的認識等。
設計封面要包括題目、完成人班級、學號、姓名、指導教師、完成時間等。
VB課程設計報告格式 :
XXX系統的設計(題目自擬)
一、功能描述
對系統要實現的功能進行確切的描述。
二、概要設計
根據功能分析,建立系統的體系結構,即將整個系統分解成若乾子模塊,用框圖表示各功能模塊之間的介面關系
三、詳細設計
詳細說明各功能模塊的實現過程,所用到的演算法、技巧等(附上代碼)。
四、效果及存在問題
說明系統的運行效果(附上界面圖形)、存在哪些不足以及預期的解決辦法。
五、心得
談談在課程設計過程中的心得體會。
⑷ 關於VB的課程設計
自己參照數據改一下應該就可以了。
#include<stdio.h> /*引用庫函數*/
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
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<'0'||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<stdio.h> /*引用庫函數*/
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
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<'0'||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高手!!!大一vb課程設計,請解釋一下源代碼。代碼都是干什麼的,越詳細越好。~~~
沒有界面,沒有按鈕的名稱,可能部分翻譯有部分的出入!
'全局變數,可簡化成 Public i,m,n,k As Integer
Public i As Integer, m As Integer, n As Integer, k As Integer
'按鈕名稱為Command1的單擊事件,按鈕功能為開局前的變數和控制項初始化
Private Sub Command1_Click()
'標簽名稱為Label1的控制項顯示 ready 字樣
Label1.Caption = "ready"
'設置滾動條的值為200
HScroll1.Value = 200
'兩個文本款內的內容設置為 0:00::00 應該是要顯示時間
Text2.Text = "0:00:00"
Text1.Text = "0:00:00"
'名稱為Timer2和Timer4的兩個時間控制項的活動狀態設置為否。
Timer2.Enabled = False
Timer4.Enabled = False
'將全局變數 n 和 k
n = 0
k = 0
'P3和P4的左邊緣在窗體的0像素位
P3.Left = 0
P4.Left = 0
'全局變數 i 賦值 1
i = 1
'Timer1時間空間的活動狀態設置為真,開始計時,每隔Interval(Timer1控制項該屬性的值)毫秒執行一次Timer1_Timer函數
Timer1.Enabled = True
End Sub
'觸發a1和Command1控制項的單擊事件
Private Sub a1_Click()
Command1_Click
End Sub
'退出按鈕
Private Sub a2_Click()
End
End Sub
'單擊b1按鈕時,調用系統自帶記事本 打開位於A:\龜兔賽跑\2\readme.txt 文件。你那位學長的系統應該是安裝在D盤的!如果你系統安裝在C盤只要把D改成C即可,另外A:一般為軟碟機,將路徑指向存在的路徑才能正常訪問
Private Sub b1_Click()
Shell "d:\windows\notepad.exe A:\龜兔賽跑\2\readme.txt", 1
End Sub
'單擊b2按鈕時彈出 消息框
Private Sub b2_Click()
MsgBox "版本1.0" & Chr(13) & "初次嘗試,不足之處,多多指教", 48, "關於賽跑"
End Sub
'響應Form窗體的鍵盤按下事件,鍵盤按下一次運行一次該函數
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Dim j As Integer
'把HScroll1滾動條的當前值賦給變數 j
j = HScroll1.Value
'定義兩個靜態變數,第一次創建後在窗體關閉前不會二次重建,也就是說本次函數執行後Blin1的值是True,則再運行本函數時Blin1的初值就是True
Static blin1 As Boolean
Static blin2 As Boolean
'判斷按下的按鍵是不是 A 或者 S ,是則繼續判斷,否則跳到執行Endif下面的語句
If KeyCode = vbKeyA Or KeyCode = vbKeyS Then
'如果i小於8則繼續,否則跳到執行Endif下面的語句
If i < 8 Then
'Text2文本款顯示「搶跑」並彈出「犯規」警告框
Text2.Text = "搶跑"
MsgBox "PLAYERONE搶跑", 16, "犯規"
'兩個文本框內容重新換為0:00:00
Text2.Text = "0:00:00"
Text1.Text = "0:00:00"
'重新初始化全局變數 n,k,i
n = 0
k = 0
i = 1
』退出該函數
Exit Sub
End If
End If
'判斷如果blin1為假,而且i=8則繼續,否則跳到對應的Endif
If blin1 = False And i = 8 Then
'如果按下的按鍵為A則繼續,否則跳到對應的Endif
If KeyCode = vbKeyA Then
'P3控制項的左邊緣在窗體的位置+j個像素
P3.Left = P3.Left + j
'變數blin1和blin2的值自反,原來為真的變為假,原來為假的變為真
blin1 = Not blin1
blin2 = Not blin2
End If
End If
'判斷若blin2的值為真且i=8則繼續執行,否則跳到對應的Endif語句後的代碼
If blin2 = True And i = 8 Then
'如果按下的按鈕為 S 則繼續,否則……
If KeyCode = vbKeyS Then
'P3控制項的左邊緣在窗體的位置增加j個像素
P3.Left = P3.Left + j
'blin1和blin2自反,同上一句IF
blin2 = Not blin2
blin1 = Not blin1
End If
End If
'靜態變數blin3和blin4
Static blin3 As Boolean
Static blin4 As Boolean
'如果按下按鍵的ASCII碼為222或186,則繼續,否則……
If KeyCode = 222 Or KeyCode = 186 Then
'如果i<8則繼續,否則……
If i < 8 Then
'Text2顯示 「搶跑」 字樣,並顯示犯規警告
Text2.Text = "搶跑"
MsgBox "PLAYERTWO搶跑", 16, "犯規"
'初始化全局變數和Text2文本框內容
i = 1
Text2.Text = "0:00:00"
n = 0
k = 0
'結束本函數
Exit Sub
End If
End If
'判斷blin3的值是否為假 並且 i=8,是則繼續,否則……
If blin3 = False And i = 8 Then
'判斷按下的按鈕的ASCII碼是否為186
If KeyCode = 186 Then
'P4控制項的左邊緣在窗體的位置加j個像素
P4.Left = P4.Left + j
'blin3和blin4自反
blin3 = Not blin3
blin4 = Not blin4
End If
End If
'判斷功能同上,只要上面懂了這里也就懂了。功能大致一樣。只是響應的控制項不一樣而已。(上面為P3,這里為P4)
If blin4 = True And i = 8 Then
If KeyCode = 222 Then
P4.Left = P4.Left + j
blin4 = Not blin4
blin3 = Not blin3
End If
End If
'如果P3控制項的左邊緣大於或者等於P1控制項的寬減去P3控制項的寬的值則繼續,否則……
If P3.Left >= P1.Width - P3.Width Then
'設置Timer4時間控制項為不活動的
Timer4.Enabled = False
'P3的左邊緣設置為P1控制項的寬減P3控制項的寬
P3.Left = P1.Width - P3.Width
End If
'功能同上一個IF語句。
If P4.Left >= P2.Width - P4.Width Then
Timer2.Enabled = False
P4.Left = P2.Width - P4.Width
End If
'判斷P3控制項的左邊緣位置是否比P1控制項的寬減P3控制項的寬的值要大於或等於,並且P4的左邊緣也比P2的寬減P4的寬要大於或等於,是則繼續,否則……
If P3.Left >= P1.Width - P3.Width And P4.Left >= P2.Width - P4.Width Then
'判斷n的值是否比k大,是則繼續,否則……
If n > k Then
'彈出窗口,顯示獲勝者為一號
MsgBox "PLAYERONE 獲勝", 48, "比賽 "
'Label1文本控制項的可見狀態為假(不可見)
Label1.Visible = False
'Timer2和Timer4的活動狀態為假
Timer2.Enabled = False
Timer4.Enabled = False
'初始化一下變數和控制項文本
k = 0
n = 0
Text1.Text = "0:00:00"
Text2.Text = "0:00:00"
'P3和P4控制項左邊緣緊貼窗體
P3.Left = 0
P4.Left = 0
End If
'如果k大於n
If k > n Then
'彈出窗口,顯示獲勝者為二號
MsgBox "PLAYERTWO 獲勝", 48, "比賽 "
'此處功能和前一個IF的對應代碼段功能相同,此處不再熬述
Label1.Visible = False
Timer2.Enabled = False
Timer4.Enabled = False
k = 0
n = 0
Text1.Text = "0:00:00"
Text2.Text = "0:00:00"
P3.Left = 0
P4.Left = 0
End If
End If
End Sub
'當Timer1時間控制項的Enabled屬性值為真時,每隔Interval的值(毫秒數)執行一次該函數
Private Sub Timer1_Timer()
'靜態變數blins
Static blins As Boolean
'Label1控制項的可見性為blins
Label1.Visible = blins
'i的值自增1
i = i + 1
'blins的值自反,自反後每次執行相當於Label1標簽會閃爍
blins = Not blins
'如果i=8則觸發,否則……
If i = 8 Then
Beep
'label1顯示 「開始」
Label1.Caption = "開始"
'label1標簽可見
Label1.Visible = True
'timer2和timer4控制項為活動狀態,timer1為不活動
Timer2.Enabled = True
Timer4.Enabled = True
Timer1.Enabled = False
End If
End Sub
'同上,控制項為TIMER2
Private Sub Timer2_Timer()
'n值自增1
n = n + 1
'n0的值取n和60的模
n0 = n Mod 60
'以下是一些賦值的數學計算
n1 = (n \ 60) Mod 60
n2 = ((n \ 60) \ 60) Mod 60
'text1文本框顯示("0" & CStr(n2)這段文本的右2位和("0" + CStr(n1)的右2位和("0" & CStr(n0)的右2位,(控制時間的現實格式)
Text1.Text = Right(("0" & CStr(n2)), 2) & ":" & Right(("0" + CStr(n1)), 2) & ":" & Right("0" & CStr(n0), 2)
將時間顯示在text1裡面
End Sub
'功能同Timer3控制項!顯示Text2文本框的時間內容,宿舍熄燈,有所不足,見諒!
Private Sub Timer4_Timer()
k = k + 1
k0 = k Mod 60
k1 = (k \ 60) Mod 60
k2 = ((k \ 60) \ 60) Mod 60
Text2.Text = Right(("0" & CStr(k2)), 2) & ":" & Right(("0" + CStr(k1)), 2) & ":" & Right("0" & CStr(k0), 2)
End Sub
⑹ VB課程設計和報告
歡迎看一下我的計算器,
有程序界面,
你可以參考一下,添加運算功能。
http://hi..com/jack%5Fican/blog/item/f3ab762acc95133a5243c1a2.html
說明:1.共有4個文本框其,其中三個是填入或輸出數據的(名稱分別是:txta txtb txtc),剩下的那個是符號(txtd)2.共7個按鈕,4個是符號按鈕,一個計算,一個清零.這是我弄的程序」袖珍計算器」代碼也是自己編寫的,代碼如下:通用聲明Dim j As Integer '定義j為整型
Private Sub Text1_Change()End SubPrivate Sub Command1_Click()
txtfuhao.Text = "+" '將」+」顯示到文本框txtfuhao.Text中
End SubPrivate Sub Command2_Click()
txtfuhao.Text = "-" ''將」-」顯示到文本框txtfuhao.Text中
End SubPrivate Sub Command3_Click()
txtfuhao.Text = "×" '將」×」顯示到文本框txtfuhao.Text中
End SubPrivate Sub Command4_Click()
txtfuhao.Text = "÷" 將」÷」'顯示到文本框txtfuhao.Text中
End Sub
Private Sub Command5_Click()
Dim a, b, c As Integer
a = Val(txta.Text) '將txta.Text里的內容轉化為數值型,然後再賦給a
b = Val(txtb.Text) '將txtb.Text里的內容轉化為數值型,然後再賦給b
If txtfuhao.Text = "+" Then '運算過程
c = a + b '運算過程
ElseIf txtfuhao.Text = "-" Then '運算過程
c = a - b '運算過程
ElseIf txtfuhao.Text = "÷" Then '運算過程
c = a / b '運算過程
ElseIf txtfuhao.Text = "×" Then '運算過程
c = a * b '運算過程
Else
j = MsgBox("您輸入的符號不正確", vbOKOnly, "錯誤信息")
End If
txtc.Text = c '將運算結果c輸出到文本框txtc中
End SubPrivate Sub Command6_Click()
txta.Text = "" '將空字元輸入到文本框內(刷新)
txtb.Text = "" '將空字元輸入到文本框內(刷新)
txtc.Text = "" '將空字元輸入到文本框內(刷新)
txtfuhao.Text = "" '將空字元輸入到文本框內(刷新)
End SubPrivate Sub Command7_Click()
End '結束程序
End SubPrivate Sub Form_Load()End Sub
參考資料:http://hi..com/jack%5Fican/blog/item/f3ab762acc95133a5243c1a2.html
要的話請發郵件到:[email protected] 叫我要,我再發到你的郵箱里!
⑺ Vb課程設計
VB課程設計需求1、每位同學自行選取1個題目進行設計,不得雷同。也可自己提出設計題目,要回預先答取得老師的同意。2、題目後面是每一個題目的每班限值人數。 3、題目工作量較大時,可結組完成,但要預先取得老師的同意。 4、設計後期,應寫出設計報告,包括:題目內容、演算法表明、軟體程序變數用表明、處理方法、創新點及對設計所包含的知識點的認識等。 設計封面要包括題目、完成人班級、學號、姓名、指導教師、完成時間等。 VB課程設計報告格式 :XXX系統(System)的設計(題目自擬) 一、功能描述 對系統(System)要實現的功能進行確切的描述。 二、概要設計 根據功能分析,新建系統(System)的體系結構,即將整個系統(System)分解成若乾子模塊,用框圖表明各功能模塊之間的介面關系 三、清楚設計 清楚表明各功能模塊的實現過程,所用到的演算法、技巧等(附上代碼)。 四、效果及存在問題 表明系統(System)的運行效果(附上頁面圖形)、存在哪些不到以及預期的處理方法。 五、心得 談談在課程設計過程中的心得體會。
⑻ VB課程設計演算法集錦
Private Sub Command1_Click()
If IsNumeric(Text1.Text) And IsNumeric(Text2.Text) And IsNumeric(Text3.Text) And IsNumeric(Text4.Text) Then
Text5.Text = Val(Text1.Text) * Val(Text2.Text) + Val(Text3.Text) * Val(Text4.Text)
End If
End Sub
Private Sub Form_Load()
Label1.Caption = "22:00-05:00"
Label2.Caption = "05:00-22:00"
Label3.Caption = "電價"
Label4.Caption = "用電量版"
Command1.Caption = "計算電費權"
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Text4.Text = ""
Text5.Text = ""
End Sub
⑼ VB課程設計
這個懂了的話其實很簡單,包括三步:
1、計算曲線經過的各點,將點存在一個數組里。計算的公式根據你需要的曲線來算。
2、用繪圖函數將保存在數組里的各個點按次連接起來,顯示到屏幕上。
3、圖形顯示一定時間後再用繪圖函數用背景色畫一遍圖形(就是將圖形擦除啦。)
然後再循環到第一步,不斷循環就實現動態顯示了。
循環可以用計時器做。
繪圖函數vb有自帶的,但是貌似比較慢,最好用windows帶的函數(API 函數)。
還有不懂可以問我。