vb課程設計百度文庫
A. vb課程設計心得體會
VB課程設計要求
1、每位同學自行選擇一個題目進行設計,不得雷同。也可自己提回出設計題目,要答預先取得老師的同意。
2、題目後面是每個題目的每班限值人數。
3、題目工作量較大時,可結組完成,但要預先取得老師的同意。
4、設計後期,應寫出設計報告,包括:題目內容、演算法說明、程序變數使用說明、解決方法、創新點及對設計所包含的知識點的認識等。
設計封面要包括題目、完成人班級、學號、姓名、指導教師、完成時間等。
VB課程設計報告格式 :
XXX系統的設計(題目自擬)
一、功能描述
對系統要實現的功能進行確切的描述。
二、概要設計
根據功能分析,建立系統的體系結構,即將整個系統分解成若乾子模塊,用框圖表示各功能模塊之間的介面關系
三、詳細設計
詳細說明各功能模塊的實現過程,所用到的演算法、技巧等(附上代碼)。
四、效果及存在問題
說明系統的運行效果(附上界面圖形)、存在哪些不足以及預期的解決辦法。
五、心得
談談在課程設計過程中的心得體會。
B. 求VB 關於車輛管理系統的課程設計 有現成的給發一個 到我郵箱 [email protected](PS:不要百度文庫的)謝
真的很想有。但沒有。。。。。
C. 求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
D. Vb課程設計
VB課程設計需求1、每位同學自行選取1個題目進行設計,不得雷同。也可自己提出設計題目,要回預先答取得老師的同意。2、題目後面是每一個題目的每班限值人數。 3、題目工作量較大時,可結組完成,但要預先取得老師的同意。 4、設計後期,應寫出設計報告,包括:題目內容、演算法表明、軟體程序變數用表明、處理方法、創新點及對設計所包含的知識點的認識等。 設計封面要包括題目、完成人班級、學號、姓名、指導教師、完成時間等。 VB課程設計報告格式 :XXX系統(System)的設計(題目自擬) 一、功能描述 對系統(System)要實現的功能進行確切的描述。 二、概要設計 根據功能分析,新建系統(System)的體系結構,即將整個系統(System)分解成若乾子模塊,用框圖表明各功能模塊之間的介面關系 三、清楚設計 清楚表明各功能模塊的實現過程,所用到的演算法、技巧等(附上代碼)。 四、效果及存在問題 表明系統(System)的運行效果(附上頁面圖形)、存在哪些不到以及預期的處理方法。 五、心得 談談在課程設計過程中的心得體會。
E. VB課程設計
這個懂了的話其實很簡單,包括三步:
1、計算曲線經過的各點,將點存在一個數組里。計算的公式根據你需要的曲線來算。
2、用繪圖函數將保存在數組里的各個點按次連接起來,顯示到屏幕上。
3、圖形顯示一定時間後再用繪圖函數用背景色畫一遍圖形(就是將圖形擦除啦。)
然後再循環到第一步,不斷循環就實現動態顯示了。
循環可以用計時器做。
繪圖函數vb有自帶的,但是貌似比較慢,最好用windows帶的函數(API 函數)。
還有不懂可以問我。
F. 關於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、回到主菜
G. 幫忙做簡單《VB程序設計》課程設計
真不知道為什麼書上會讓你們去學Adodc這種垃圾控制項....發布程序的時候帶個累贅不說,用起來也不靈活....
自己用ado寫個多簡單啊....
唉....教育啊.....把些好學生都毀了
H. 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] 叫我要,我再發到你的郵箱里!
I. vb課程設計滾動字幕版
Private Sub Command1_Click()
Dim i As Long
Dim r As Long
Dim a(1 To 20) As Long
List1.Clear
Randomize
For i = 1 To 6
Do
r = Int(Rnd * 20 + 1)
Loop Until a(r) <= 2
a(r) = a(r) + 1
List1.AddItem r
Next
List1.AddItem vbNullString
For i = 1 To 20
If a(i) > 0 Then
List1.AddItem i & "出現了" & a(i) & "次; "
End If
Next
End Sub
J. vb課程設計
這才明白,抄其實很簡單,包括三個步襲驟:<br /> 1,通過計算曲線的點,點上有一個數組。你需要計算的曲線計算公式的基礎上。 <br /> 2,將被保存在不同的時間點在數組中的按次付費鏈接,屏幕上顯示的繪圖功能。 <br /> 3,圖形顯示的背景顏色一段時間,然後再次使用的繪圖功能畫出圖形(圖形刪除它。)<br /> <br />然後回收到的第一個步驟,連續循環,實現動態顯示。 <br /> <br />周期定時器。 <br /> <br />繪圖功能VB來了,但它看起來像慢,最好是使用Windows的函數(API函數)。 <br /> <br />有不明白的可以問我。