超碰在线观看97青草国产_动漫毛片免费观看_亚洲无码黄色电影在线播放_中文字幕无码视频_国产精品91不卡_好爽**片一区二区三区四_亚洲欧美日韩成人网手机版_香蕉影视网站在线观看_欧美成人永久免费观看_国内精品黄三级毛片

軟件開發(fā)流程圖示例關(guān)于班級管理(軟件開發(fā)如何管理)

軟件開發(fā) 3740
本篇文章給大家談?wù)勡浖_發(fā)流程圖示例關(guān)于班級管理,以及軟件開發(fā)如何管理對應(yīng)的知識點(diǎn),希望對各位有所幫助,不要忘了收藏本站喔。 本文目錄一覽: 1、用C編寫班級成績管理系統(tǒng)

本篇文章給大家談?wù)勡浖_發(fā)流程圖示例關(guān)于班級管理,以及軟件開發(fā)如何管理對應(yīng)的知識點(diǎn),希望對各位有所幫助,不要忘了收藏本站喔。

本文目錄一覽:

用C編寫班級成績管理系統(tǒng)

C語言課程設(shè)計報告—班級成績管理系統(tǒng)

需要分析:

學(xué)生成績管理系統(tǒng)有13種功能。把這13個功能做成13個子函數(shù)。在主函當(dāng)數(shù)中設(shè)計一個菜單對這13個子數(shù)進(jìn)行管理。來實(shí)現(xiàn)對整個系統(tǒng)的操作。

根據(jù)課題的要求。每一個學(xué)生的包括姓名(char)、學(xué)號(char)、M門課程的成績(float).再加上系統(tǒng)功能上的要求每一學(xué)生的信息還要總分和名次等。所以自然的想到要用結(jié)構(gòu)體來定義每一個學(xué)生的信息結(jié)構(gòu)。然后用鏈表把它們組成一個有序的整體。用對鏈表的操作來實(shí)現(xiàn)對所有學(xué)生信息的統(tǒng)一管理(成績顯示、成績排序、成績修改等)。最后為了以后按照處理后的順序保存到文件中。

. 各函數(shù)的功能:

概要設(shè)計:

程序的模塊組成:

主 函 數(shù): int main()

新建函數(shù):STUDENT *init()

輸入函數(shù) :STUDENT *create()

顯示函數(shù): void print(STUDENT *head)

刪除函數(shù): STUDENT *delete(STUDENT *head)

按名字尋找函數(shù): void lookup(STUDENT *head)

保存函數(shù): void save(STUDENT *head)

按總分排序函數(shù): STUDENT *sort(STUDENT *head)

計算總分和均分函數(shù): void computer(STUDENT *h)

修改函數(shù): STUDENT *Modify(STUDENT *head,STUDENT *new)

按學(xué)號排序函數(shù): STUDENT *index(STUDENT *h)

菜單函數(shù):int menu_select()

各個函數(shù)的主要功能:

輸入函數(shù): 隨時輸入數(shù)據(jù)。

菜單函數(shù):顯示系統(tǒng)主菜單。

顯示函數(shù): 顯示所有學(xué)生的信息。

尋找函數(shù): 方便學(xué)生查找自己的成績。

刪除函數(shù): 刪除某學(xué)生的信息。

排序函數(shù): 按總成績排序。

按學(xué)號排序函數(shù): 按學(xué)號排序。

插入函數(shù): 可以插入新的信息。

保存函數(shù): 保存好學(xué)生成績,以免丟失。

統(tǒng)計函數(shù):

l 顯示每門課程成績最高的學(xué)生的基本信息。

l 顯示每門課程的平均成績。

l 顯示超過某門課程平均成績的學(xué)生人數(shù)。

課題的功能模塊的劃分:

開始

菜單界面

功能選擇

初始化函數(shù)

輸入學(xué)生信息

刪除學(xué)生信息

顯示學(xué)生信息

查找學(xué)生信息

按成績排序

保存到文件

從文件讀數(shù)據(jù)

插入學(xué)生成績

分類合計

退出系統(tǒng)

結(jié)束

詳細(xì)設(shè)計: 整個系統(tǒng)除了主函數(shù)外,另外還有14個函數(shù),實(shí)現(xiàn)八大功能:輸入功能、顯示功能、查找功能、排序功能、插入功能、保存功能、讀取功能。各個函數(shù)的詳細(xì)設(shè)計說明分別如下:

主函數(shù) main()

利用無限次循環(huán)for(;;)和swithch()實(shí)現(xiàn)各函數(shù)的調(diào)用,系統(tǒng)根據(jù)輸入的數(shù)字選項(xiàng)來調(diào)用相應(yīng)的函數(shù)。

菜單選擇函數(shù) int menu_select()

這是一個無參函數(shù),主要實(shí)現(xiàn)“功能選擇”的界面,在這個界面里有顯示系統(tǒng)的九大功能,根據(jù)每個功能前面的序號進(jìn)行選擇。等執(zhí)行完每一個函數(shù)功能后,返回菜單。

代碼設(shè)計: 初始化函數(shù) STUDENT *init()

這是一個無參函數(shù),里面只有兩個語句,它的作用是使鏈表初始化,使head的值為NULL和一個清屏語句。比如:沒有這個函數(shù)的話,在你沒有輸入任何數(shù)據(jù)的情況下,去執(zhí)行顯示功能的時候會顯示一些亂碼!

輸入記錄函數(shù) STUDENT *create() 這是一個無參函數(shù),用來執(zhí)行學(xué)生成績記錄的輸入,當(dāng)學(xué)生為@時停止輸入,函數(shù)結(jié)束后,帶回一個鏈表頭的指針指向一下個學(xué)生的信息插在表頭。

N-S流程圖如下:

head=NULL無條件循環(huán)

指針p指向新開辟的單元

指針p是否為空

是 否

輸入學(xué)號p-num

輸出 p-num是否為@

內(nèi)存 是 否

溢出 輸入姓名p-name

停止 for(i=0;i3;i++)

輸入 輸入成績

返回 p-sum=s;

菜單 p-average=(float)s/3;

顯示記錄函數(shù) void print(STUDENT *head)

這是一個不返回值的有參函數(shù),形參為“鏈表頭的指針”,負(fù)責(zé)對全部學(xué)生成績記錄的輸出,不足之處就是不能對學(xué)生成績進(jìn)行分頁顯示。

算法:先將p結(jié)點(diǎn)的指針指向第一個結(jié)點(diǎn),將p結(jié)點(diǎn)(即第一個結(jié)點(diǎn))的數(shù)據(jù)輸出。然后再將p結(jié)點(diǎn)的指針指向p指針的的指針(即下一結(jié)點(diǎn)),將p結(jié)點(diǎn)(即第一結(jié)點(diǎn))的數(shù)據(jù)輸出。重復(fù)執(zhí)行此步聚直到p指針指向NULL為止。

N-S流程圖如下:

p=head,使指向第一個結(jié)點(diǎn)

輸出p所指向的結(jié)點(diǎn)

p指向一下個結(jié)點(diǎn)

當(dāng)p指的不是表尾

程序調(diào)試:

由于本課題中的許多知識點(diǎn)都沒有學(xué)過都要靠自己到課外的資料中去查找。在用的時候難免出現(xiàn)這樣那樣的錯誤。如開始設(shè)計出來的菜單不是預(yù)想的那樣,而是總個窗中出現(xiàn)混亂。解決的這個問題的辦法是調(diào)整。最后還是老師幫我?guī)臀覀冋业搅藛栴}的所在——for 循環(huán)的次超過了鏈表中結(jié)點(diǎn)的數(shù)量。再就是自定義函數(shù)時由于課本的概念不清楚,多寫了空格鍵,以至函數(shù)調(diào)用不出來。又如:在設(shè)計修改學(xué)生信息時的密密碼時。當(dāng)用戶發(fā)現(xiàn)輸入密碼錯誤按了退格鍵后,因?yàn)椤?”并沒有消去。導(dǎo)致用戶再次按退格鍵,又出現(xiàn)前面的情況。最終導(dǎo)致輸入密碼錯誤。所以用了兩次退格鍵:

在對鏈表操作時,要特別鏈表指針的移動(p=p-next)和鏈表尾的判斷 (p= =NULL)。沒有指針的移動,就很容易出現(xiàn)死循環(huán)。而在運(yùn)行過程中不能控制。所以你就會認(rèn)為是死機(jī)。如果沒有鏈表尾的判斷。就會在運(yùn)行過程出現(xiàn)想不到的錯誤。如:在顯示鏈表信息時,后面就會出現(xiàn)亂碼。

一個系統(tǒng)的菜單和提示信息非常重要。如果沒有這些用戶根本不知道怎么用你設(shè)計的這個系統(tǒng)。在設(shè)計的調(diào)試過程中也無法順利的完成調(diào)試工作。有了一個清晰簡單的菜單和一些提示信息這后,調(diào)試過程完成的非常順利。

予我耐心解答的老師和同學(xué),是他們?yōu)槲倚〕绦虻某晒ζ鸬搅岁P(guān)鍵性的作用,那么多個日夜,如此多的困難,同學(xué)們勤懇塌實(shí),從開始到結(jié)束,沒有顯出一點(diǎn)倦意,始終熱情高漲,我感謝這種氛圍,感謝學(xué)校提供的良好條件。

回顧起此次課程設(shè)計,至今我仍感慨頗多,的確,從拿到題目到完成整個編程,從理論到實(shí)踐,在整整半個學(xué)期的日子里,可以學(xué)到很多很多的東西,同時不僅可以鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。通過這次課程設(shè)計使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實(shí)際動手能力和獨(dú)立思考的能力。在設(shè)計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固,比如說結(jié)構(gòu)體……通過這次課程設(shè)計之后,一定把以前所學(xué)過的知識重新溫故。

本次課程設(shè)計結(jié)束了,對于我的影響很大。我通過這次實(shí)踐學(xué)到了許多知識。學(xué)到了設(shè)計一個簡單的系統(tǒng)。要注意哪些方面。也使我知道自己哪些方面做得還不夠。

但我出總結(jié)出了一點(diǎn)點(diǎn)的經(jīng)驗(yàn)如下:

1、要對系統(tǒng)的功能和要求做出詳細(xì)的分析,并合理分解任務(wù)。

2、把分解出來的子任務(wù),做給一個相對獨(dú)立的模塊。

3、在設(shè)計一個模塊之前,要簡單構(gòu)想一下總界面的顯視情況。

4、針對構(gòu)想出來的界面進(jìn)行程序的編寫。

最后,感謝老師您對我的指導(dǎo)和從百忙中抽空看我的設(shè)計,謝謝!

附件:

源程序:

#include "stdio.h" /*I/O函數(shù)*/

#include "stdlib.h" /*其它說明*/

#include "string.h" /*字符串函數(shù)*/

#include "conio.h" /*屏幕操作函數(shù)*/

#include "mem.h" /*內(nèi)存操作函數(shù)*/

#include "ctype.h" /*字符操作函數(shù)*/

#include "alloc.h" /*動態(tài)地址分配函數(shù)*/

#include "dos.h"

#define N 4 /*定義常數(shù)*/

typedef struct z1 /*定義數(shù)據(jù)結(jié)構(gòu)*/

{

char no[12];

char name[20];

int score[N];

float sum;

float average;

int order;

struct z1 *next;

}STUDENT;

/*以下是函數(shù)原型*/

STUDENT *init(); /*初始化函數(shù)*/

STUDENT *create(); /*創(chuàng)建鏈表*/

STUDENT *delete(STUDENT *h); /*刪除記錄*/

void print(STUDENT *h); /* 顯示所有記錄*/

void lookup(STUDENT *h); /*查找*/

void save(STUDENT *h); /*保存*/

STUDENT *load(); /*讀入記錄*/

void computer(STUDENT *h); /*計算總分和均分*/

STUDENT *Modify(STUDENT *h); /*修改記錄*/

void append(); /*追加記錄*/

STUDENT *sort(STUDENT *h); /*按總分排序*/

STUDENT *index(STUDENT *h); /*按學(xué)號排序*/

int menu_select(); /*菜單函數(shù)*/

/******主函數(shù)開始*******/

main()

{

int i;

STUDENT *head; /*鏈表定義頭指針*/

printf("\n\n\n\n\n\n\n\n\n");

printf(" * * ******* * ***** ***** * * ******* \n");

printf(" * * * * * * * ** * * * \n");

printf(" * * * * ******* * * * * * *** * ******* \n" );

printf(" * * * * * * * * * * * * * \n");

printf(" * * ******* ******* ***** * *** * * * ******* \n");

printf("\n");

printf("\n");

printf("\n");

sleep(2);

head=init(); /*初始化鏈表*/

clrscr(); /*清屏*/

for(;;) /*無限循環(huán)*/

{

switch(menu_select()) /*調(diào)用主菜單函數(shù),返回值整數(shù)作開關(guān)語句的條件*/

{ /*值不同,執(zhí)行的函數(shù)不同,break 不能省略*/

case 0:head=init();break; /*執(zhí)行初始化*/

case 1:head=create();break; /*創(chuàng)建鏈表*/

case 2:print(head);break; /*顯示全部記錄*/

case 3:head=delete(head);break; /*刪除記錄*/

case 4:lookup(head);break; /*按名字查找記錄*/

case 5:save(head);break; /*保存文件*/

case 6:head=load(); break; /*讀文件*/

case 7:computer(head);break; /*計算總分和均分*/

case 8:head=Modify(head); break; /*修改記錄,一般會插在表尾*/

case 9:head=sort(head);break; /*按部分排序*/

case 10:append();break; /*追加記錄*/

case 11:head=index(head);break; /*按學(xué)號排序*/

case 12: exit(0); /*如菜單返回值為14程序結(jié)束*/

}

}

}

/*菜單函數(shù),返回值為整數(shù)*/

menu_select()

{

char *menu[]={"***************MENU***************", /*定義菜單字符串?dāng)?shù)組*/

" 00. init list", /*初始化*/

" 01. Enter list", /*輸入記錄*/

" 02. print list ", /*顯示單鏈表中所有記錄*/

" 03. Delete a record from list", /*從表中刪除記錄*/

" 04. Search record on name", /*按照姓名查找記錄*/

" 05. Save the file", /*將單鏈表中記錄保存到文件中*/

" 06. Load the file", /*從文件中讀入記錄*/

" 07. compute the score", /*計算所有學(xué)生的總分和均分*/

" 08. Modify an information ", /*修改某學(xué)號的信息*/

" 09. sort to make new file", /*排序*/

" 10. append record to file", /*追加記錄到文件中*/

" 11. index on nomber", /*按學(xué)號排序*/

" 12. Quit"}; /*退出*/

char s[3]; /*以字符形式保存選擇號*/

int c,i; /*定義整形變量*/

gotoxy(1,1); /*移動光標(biāo)*/

textcolor(YELLOW); /*設(shè)置文本顯示顏色為黃色*/

textbackground(BLUE); /*設(shè)置背景顏色為藍(lán)色*/

gotoxy(10,2); /*移動光標(biāo)*/

putch(0xc9); /*輸出左上角邊框┏*/

for(i=1;i44;i++)

putch(0xcd); /*輸出上邊框水平線*/

putch(0xbb); /*輸出右上角邊框 ┓*/

for(i=3;i20;i++)

{

gotoxy(10,i);putch(0xba); /*輸出左垂直線*/

gotoxy(54,i);putch(0xba);

} /*輸出右垂直線*/

gotoxy(10,20);putch(0xc8); /*輸出左上角邊框┗*/

for(i=1;i44;i++)

putch(0xcd); /*輸出下邊框水平線*/

putch(0xbc); /*輸出右下角邊框┛*/

window(11,3,53,19); /* 制作顯示菜單的窗口,大小根據(jù)菜單條數(shù)設(shè)計*/

clrscr(); /*清屏*/

for(i=0;i16;i++) /*輸出主菜單數(shù)組*/

{

gotoxy(10,i+1);

cprintf("%s",menu[i]);

}

textbackground(BLACK); /*設(shè)置背景顏色為黑色*/

window(1,1,80,25); /*恢復(fù)原窗口大小*/

gotoxy(10,21); /*移動光標(biāo)*/

do{printf("\n make by wenwei");

printf("\n Enter you choice(0~13):"); /*在菜單窗口外顯示提示信息*/

scanf("%s",s); /*輸入選擇項(xiàng)*/

c=atoi(s); /*將輸入的字符串轉(zhuǎn)化為整形數(shù)*/

}while(c0||c14); /*選擇項(xiàng)不在0~14之間重輸*/

return c; /*返回選擇項(xiàng),主程序根據(jù)該數(shù)調(diào)用相應(yīng)的函數(shù)*/

}

STUDENT *init()

{ clrscr();

return NULL;

}

/*創(chuàng)建鏈表*/

STUDENT *create()

{

int i; int s;

STUDENT *h=NULL,*info; /* STUDENT指向結(jié)構(gòu)體的指針*/

clrscr();

for(;;)

{

info=(STUDENT *)malloc(sizeof(STUDENT)); /*申請空間*/

if(!info) /*如果指針info為空*/

{

printf("\nout of memory"); /*輸出內(nèi)存溢出*/

return NULL; /*返回空指針*/

}

inputs("enter no:",info-no,11); /*輸入學(xué)號并校驗(yàn)*/

if(info-no[0]=='@') { clrscr();break; } /*如果學(xué)號首字符為@則結(jié)束輸入,清屏后返回*/

inputs("enter name:",info-name,15); /*輸入姓名,并進(jìn)行校驗(yàn)*/

printf("please input %d score \n",N); /*提示開始輸入成績*/

s=0; /*計算每個學(xué)生的總分,初值為0*/

for(i=0;iN;i++) /*N門課程循環(huán)N次*/

{

do{

printf("score%d:",i+1); /*提示輸入第幾門課程*/

scanf("%d",info-score[i]); /*輸入成績*/

if(info-score[i]100||info-score[i]0) /*確保成績在0~100之間*/

printf("bad data,repeat input\n"); /*出錯提示信息*/

}while(info-score[i]100||info-score[i]0);

s=s+info-score[i]; /*累加各門課程成績*/

}

info-sum=s; /*將總分保存*/

info-average=(float)s/N; /*求出平均值*/

info-order=0; /*未排序前此值為0*/

info-next=h; /*將頭結(jié)點(diǎn)做為新輸入結(jié)點(diǎn)的后繼結(jié)點(diǎn)*/

h=info; /*新輸入結(jié)點(diǎn)為新的頭結(jié)點(diǎn)*/

clrscr();

}

return(h); /*返回頭指針*/

}

/*輸入字符串,并進(jìn)行長度驗(yàn)證*/

inputs(char *prompt, char *s, int count)

{

char p[255];

do{

printf(prompt); /*顯示提示信息*/

scanf("%s",p); /*輸入字符串*/

if(strlen(p)count)printf("\n too long! \n"); /*進(jìn)行長度校驗(yàn),超過count值重輸入*/

}while(strlen(p)count);

strcpy(s,p); /*將輸入的字符串拷貝到字符串s中*/

}

/*輸出鏈表中結(jié)點(diǎn)信息*/

void print(STUDENT *h)

{

int i=0; /* 統(tǒng)計記錄條數(shù)*/

STUDENT *p; /*移動指針*/

clrscr(); /*清屏*/

p=h; /*初值為頭指針*/

printf("\n\n\n*********************************STUDENT************************************\n");

printf("|rec|nO | name | sc1| sc2| sc3| sc4| sum | ave |order|\n");

printf("|---|----------|---------------|----|----|----|----|--------|--------|-----|\n");

while(p!=NULL) /*只要p不是尾結(jié)點(diǎn),就輸出記錄*/

{

i++;

printf("|%3d|%-10s|%-15s|%4d|%4d|%4d|%4d| %6.2f | %6.2f | %3d |\n", i, p-no,p-name,p-score[0],p-score[1],p-score[2],p-score[3],p-sum,p-average,p-order);

p=p-next;

}

printf("***********************************end**************************************\n");

getch(); /*輸入任一鍵返回主菜單*/

clrscr(); /*清屏*/

}

/*刪除記錄*/

STUDENT *delete(STUDENT *h)

{

STUDENT *p,*q; /*p為查找到要刪除的結(jié)點(diǎn)指針,q為其前驅(qū)指針*/

char s[12]; /*存放學(xué)號*/

char *pass="wenwei28";

char a[20],b=NULL;

int i=0;

clrscr();

printf("Input your password:");

while((i20)(b!='\r'))

{ b=getch(); /*無回顯輸入*/

if(b==8)

{ if(i0)

{a[--i]=NULL;

putchar(8); /*退格鍵*/

putchar(' '); /*以空格代替*/

putchar(8);

}

else putchar(7); /*沒有任何字符的退格,響鈴警告*/

}

else if(b!='\r')

{ a[i++]=b; /*只要不是退格和回車就接受*/

putchar('*');

}

else

{a[i]=NULL; break; /*密碼輸入完了,記得加個NULL到后面*/

}

}

if(strcmp(a,pass)!=0)

{clrscr();

printf("Password is mistake Tow seconds to return!");

sleep(2);clrscr();return h;

}

else {printf("Password is OK! Welcome to come!"); sleep(3);

}

clrscr(); /*清屏*/

printf("please deleted no\n"); /*顯示提示信息*/

scanf("%s",s); /*輸入要刪除記錄的學(xué)號*/

q=p=h; /*給q和p賦初值頭指針*/

while(strcmp(p-no,s)p!=NULL) /*當(dāng)記錄的學(xué)號不是要找的,或指針不為空時*/

{

q=p; /*將p指針值賦給q作為p的前驅(qū)指針*/

p=p-next; /*將p指針指向下一條記錄*/

}

if(p==NULL) /*如果p為空,說明鏈表中沒有該結(jié)點(diǎn)*/

{ printf("\nlist no %s student\n",s);sleep(2);clrscr();return h;}

else /*p不為空,顯示找到的記錄信息*/

{

printf("*********************************have found********************************\n");

printf("|no | name | sc1| sc2| sc3| sc4| sum | ave |order|\n");

printf("|------------|---------------|----|----|----|----|--------|--------|-----|\n");

printf("|%-12s|%-15s|%4d|%4d|%4d|%4d| %6.2f | %6-5.2f | %3d |\n", p-no,

p-name,p-score[0],p-score[1],p-score[ q=p; /*保存當(dāng)前結(jié)點(diǎn)的指針,作為下一結(jié)點(diǎn)的前驅(qū)*/

p=p-next; /*指針后移,新讀入數(shù)據(jù)鏈到當(dāng)前表尾*/

}

q-next=NULL; /*最后一個結(jié)點(diǎn)的后繼指針為空*/

fclose(fp); /*關(guān)閉文件*/

printf("---You have success read data from file!!!---\n");

getch(); /*按任意鍵返回主菜單*/

clrscr();

return h; /*返回頭指針*/

}

/*成績統(tǒng)計*/

void computer(STUDENT *h)

{

STUDENT *p,*t,*q; /*定義移動指針*/

float saverage[N]={0}; /*均分初值為0*/

int i;

clrscr();

for (i=0;iN;i++)

{ int n=0,j=0; /*保存記錄條數(shù)初值為0*/

long s=0; /*總分初值為0*/

p=h; /*從頭指針開始*/

while(p!=NULL) /*當(dāng)p不為空時處理*/

{

s+=p-score[i]; /*累加總分*/

j++; /*統(tǒng)計記錄條數(shù)*/

p=p-next; /*指針后移*/

h; /*返回頭指針

VB數(shù)據(jù)流程圖

目錄

摘要

ABSTRACT

前言

第一章 為什么要開發(fā)一個學(xué)生檔案管理系統(tǒng)?

第二章 計算機(jī)已經(jīng)成為我們學(xué)習(xí)和工作的得力助手

1.1 在中小學(xué)中用計算機(jī)管理學(xué)生檔案的意義

1.2 為將來學(xué)校上網(wǎng)做好準(zhǔn)備

1.4 學(xué)生檔案的設(shè)計分析

第三章 怎樣開發(fā)一個學(xué)生檔案管理系統(tǒng)?

2.1 編程環(huán)境的選擇

2.2 關(guān)系型數(shù)據(jù)庫的實(shí)現(xiàn)

2.3 二者的結(jié)合(DBA)

第四章 Windows下的Visual Basic 編程環(huán)境簡介

3.1 告別“hello world”的年代

3.2 面對對象的編程

3.3 實(shí)現(xiàn)菜單選項(xiàng)

3.4 實(shí)現(xiàn)工具欄

3.5 幫助

3.6關(guān)于系統(tǒng)

第五章 使用Access2000 實(shí)現(xiàn)關(guān)系型數(shù)據(jù)庫

4.1 數(shù)據(jù)庫的概念

4.2 新建一個數(shù)據(jù)庫

4.3 修改已建的數(shù)據(jù)庫

4.4 實(shí)現(xiàn)數(shù)據(jù)庫之間的聯(lián)系

第五章 系統(tǒng)總體規(guī)劃

5.1 系統(tǒng)功能

5.2 流程圖

第六章 系統(tǒng)具體實(shí)現(xiàn)

6.1 用戶界面的實(shí)現(xiàn)

6.1.1 封面

6.1.2 主界面

6.1.3 幫助系統(tǒng)

6.2 數(shù)據(jù)庫的實(shí)現(xiàn)

6.2.1 學(xué)籍?dāng)?shù)據(jù)庫

6.2.2 學(xué)生成績庫

6.2.3 課程庫

6.3 與VB的連接

第七章 結(jié)束語

第八章 主要參考文獻(xiàn)

附錄

--------------摘要--------------

學(xué)生檔案管理系統(tǒng)是典型的信息管理系統(tǒng)(MIS),其開發(fā)主要包括后臺數(shù)據(jù)庫的建立和維護(hù)以及前端應(yīng)用程序的開發(fā)兩個方面。對于前者要求建立起數(shù)據(jù)一致性和完整性強(qiáng)、數(shù)據(jù)安全性好的庫。而對于后者則要求應(yīng)用程序功能完備,易使用等特點(diǎn)。

經(jīng)過分析,我們使用 MICROSOFT公司的 VISUAL BASIC開發(fā)工具,利用其提供的各種面向?qū)ο蟮拈_發(fā)工具,尤其是數(shù)據(jù)窗口這一能方便而簡潔操縱數(shù)據(jù)庫的智能化對象,首先在短時間內(nèi)建立系統(tǒng)應(yīng)用原型,然后,對初始原型系統(tǒng)進(jìn)行需求迭代,不斷修正和改進(jìn),直到形成用戶滿意的可行系統(tǒng)。

關(guān)鍵字:控件、窗體、域。

--------------ABSTRACT--------------

The system of managing student file is a typical application of managing information system (know as MIS),which mainly includes building up data-base of back-end and developing the application interface of front-end. The former required consistency and integrality and security of data. The later should make the application powerful and easily used.

By looking up lots of datum, we selected Visual Basic presented by Microsoft because of its objective tools in Win32. VB offered a series of ActiveX operating a data-base. It can give you a short-cut to build up a proto無效 of system application. The proto無效 could be modified and developed till users are satisfied with it.

Keywords: ActiveX , Form , Field .

--------------前言--------------

學(xué)生檔案管理系統(tǒng)是一個教育單位不可缺少的部分,它的內(nèi)容對于學(xué)校的決策者和管理者來說都至關(guān)重要,所以學(xué)生檔案管理系統(tǒng)應(yīng)該能夠?yàn)橛脩籼峁┏渥愕男畔⒑涂旖莸牟樵兪侄巍5恢币詠砣藗兪褂脗鹘y(tǒng)人工的方式管理文件檔案,這種管理方式存在著許多缺點(diǎn),如:效率低、保密性差,另外時間一長,將產(chǎn)生大量的文件和數(shù)據(jù),這對于查找、更新和維護(hù)都帶來了不少的困難。

隨著科學(xué)技術(shù)的不斷提高,計算機(jī)科學(xué)日漸成熟,其強(qiáng)大的功能已為人們深刻認(rèn)識,它已進(jìn)入人類社會的各個領(lǐng)域并發(fā)揮著越來越重要的作用。

作為計算機(jī)應(yīng)用的一部分,使用計算機(jī)對學(xué)生檔案信息進(jìn)行管理,具有著手工管理所無法比擬的優(yōu)點(diǎn).例如:檢索迅速、查找方便、可靠性高、存儲量大、保密性好、壽命長、成本低等。這些優(yōu)點(diǎn)能夠極大地提高學(xué)生檔案管理的效率,也是企業(yè)的科學(xué)化、正規(guī)化管理,與世界接軌的重要條件。

因此,開發(fā)這樣一套管理軟件成為很有必要的事情,在下面的各章中我們將以開發(fā)一套學(xué)生檔案管理系統(tǒng)為例,談?wù)勂溟_發(fā)過程和所涉及到的問題及解決方法。

--------------------下面就讓我們開始正文的介紹

第一章

為什么要開發(fā)一個學(xué)生檔案管理系統(tǒng)?

計算機(jī)已經(jīng)成為我們學(xué)習(xí)和工作的得力助手:

今天,計算機(jī)的價格已經(jīng)十分低廉,性能卻有了長足的進(jìn)步。它已經(jīng)被應(yīng)用于許多領(lǐng)域,計算機(jī)之所以如此流行的原因主要有以下幾個方面:

首先,計算機(jī)可以代替人工進(jìn)行許多繁雜的勞動;

其次,計算機(jī)可以節(jié)省許多資源;

第三,計算機(jī)可以大大的提高人們的工作效率;

第四,計算機(jī)可以使敏感文檔更加安全,等等。

在中小學(xué)中用計算機(jī)管理學(xué)生檔案的意義

現(xiàn)在我國的中小學(xué)校中檔案的管理水平還停留在紙介質(zhì)的基礎(chǔ)上,這樣的機(jī)制已經(jīng)不能適應(yīng)時代的發(fā)展,因?yàn)樗速M(fèi)了許多人力和物力,在信息時代這種傳統(tǒng)的管理方法必然被計算機(jī)為基礎(chǔ)的信息管理所取代。

我作為一個計算機(jī)應(yīng)用的本科生,希望可以在這方面有所貢獻(xiàn)。改革的總設(shè)計師鄧小平同志說過“科學(xué)技術(shù)是第一生產(chǎn)力”,我希望能用我四年的所學(xué)編制出一個實(shí)用的程序來幫助中小學(xué)進(jìn)行更有效的學(xué)籍管理。

歸納起來,好處大約有以下幾點(diǎn):

1. 可以存儲歷屆的學(xué)生檔案,安全、高效;

2. 只需一到二名檔案錄入員即可操作系統(tǒng),節(jié)省大量人力;

3. 可以迅速查到所需信息。

為將來學(xué)校上網(wǎng)做好準(zhǔn)備

跟據(jù)1999年中國電信的調(diào)查報告顯示我國的上網(wǎng)人數(shù)已達(dá)到890萬,互聯(lián)網(wǎng)已經(jīng)十分普及,學(xué)校往界的畢業(yè)生希望能在世界的任何一個角落查到自己校友的信息,本系統(tǒng)為學(xué)校將來的上網(wǎng)作了先期工作,比如數(shù)據(jù)庫的建立。

學(xué)生檔案的設(shè)計分析

根據(jù)實(shí)際情況,我們使用原型法(Rapid Prototyping)即以少量代價快速地構(gòu)造一個可執(zhí)行的軟件系統(tǒng)模型。使用戶和開發(fā)人員可以較快地確定需求,然后采用循環(huán)進(jìn)化的開發(fā)方式,對系統(tǒng)模型作連續(xù)的精化,將系統(tǒng)需具備的性質(zhì)逐漸增加上去,直到所有的性質(zhì)全部滿足。此時模塊也發(fā)展成為最終產(chǎn)品了。

第二章

怎樣開發(fā)一個學(xué)生檔案管理系統(tǒng)?

編程環(huán)境的選擇

微軟公司的Visual Basic 6.0是Windows應(yīng)用程序開發(fā)工具,使目前最為廣泛的、易學(xué)易用的面向?qū)ο蟮拈_發(fā)工具。Visual Basic提供了大量的控件,這些控件可用于設(shè)計界面和實(shí)現(xiàn)各種功能,減少了編程人員的工作量,也簡化了界面設(shè)計過程,從而有效的提高了應(yīng)用程序的運(yùn)行效率和可靠性。故而,實(shí)現(xiàn)本系統(tǒng)VB是一個相對較好的選擇。

關(guān)系型數(shù)據(jù)庫的實(shí)現(xiàn)

Access2000 就是關(guān)系數(shù)據(jù)庫開發(fā)工具,數(shù)據(jù)庫能匯集各種信息以供查詢、存儲和檢索。Access 的優(yōu)點(diǎn)在于它能使用數(shù)據(jù)表示圖或自定義窗體收集信息。數(shù)據(jù)表示圖提供了一種類似于 Excel 的電子表格,可以使數(shù)據(jù)庫一目了然。另外,Access 允許創(chuàng)建自定義報表用于打印或輸出數(shù)據(jù)庫中的信息。Access也提供了數(shù)據(jù)存儲庫,可以使用桌面數(shù)據(jù)庫文件把數(shù)據(jù)庫文件置于網(wǎng)絡(luò)文件服務(wù)器,與其他網(wǎng)絡(luò)用戶共享數(shù)據(jù)庫。Access 是一種關(guān)系數(shù)據(jù)庫工具,關(guān)系數(shù)據(jù)庫是已開發(fā)的最通用的數(shù)據(jù)庫之一。如上所述,Access 作為關(guān)系數(shù)據(jù)庫開發(fā)具備了許多優(yōu)點(diǎn),可以在一個數(shù)據(jù)包中同時擁有桌面數(shù)據(jù)庫的便利和關(guān)系數(shù)據(jù)庫的強(qiáng)大功能。

二者的結(jié)合(DBA)

微軟的JET數(shù)據(jù)庫引擎提供了與數(shù)據(jù)庫打交道的途徑,我們是通過它以及Visual Basic 來訪問數(shù)據(jù)庫并對其進(jìn)行各種操作。Visual Basic、Access以及其他微軟的軟件產(chǎn)品都是通過共用JET數(shù)據(jù)庫引擎,從而給用戶提供了豐富的數(shù)據(jù)類型。

DATA 控件在數(shù)據(jù)庫中的信息與將信息顯示給用戶看的Visual Basic程序之間架起了一座橋梁。我們可以設(shè)置DATA控件的各個屬性,告訴它要調(diào)用那個數(shù)據(jù)庫的哪個部分。缺省情況下,DATA控件根據(jù)數(shù)據(jù)庫中的一個或多個數(shù)據(jù)表建立一個dynaset-無效(動態(tài)集合)類型的記錄集合。一個記錄集合是動態(tài)的也就意味著,當(dāng)原來的數(shù)據(jù)表中的容改變了以后,該記錄集合中的記錄也會隨之改變。DATA控件還提供了用來瀏覽不同記錄的各種跳轉(zhuǎn)按鈕。將DATA控件放置在窗體中之后,我們還必須在該控件與要處理的數(shù)據(jù)庫之間建立聯(lián)系。

第三章

Windows下的Visual?????????????

?????????????????????????????

?????????????????

?????????????????????????????????????????????????)。 Visual Basic應(yīng)用程序基本的構(gòu)建塊是用戶所創(chuàng)建的對象,每一個對象都具有一些特性和行為(屬性、事件和 方法)。開發(fā)人員可以最有效利用所創(chuàng)建的每一個對象。使用應(yīng)用程序具有可通用性可說擴(kuò)展性和強(qiáng)有力的功能。

Visual Basic應(yīng)用由一系列對象組成,包括有函數(shù)、菜單、函數(shù)、結(jié)構(gòu)和數(shù)據(jù)窗口、用戶對象、用戶事件等等,對象中又包含若干控件如命令按鈕、單行編輯器等這些對象和控件都可在許多應(yīng)用中重復(fù)使用。

實(shí)現(xiàn)菜單選項(xiàng)

菜單是程序最重要的特性之一,大多數(shù)程序都依賴一個定義良好的菜單使程序易于使用和維護(hù),Visual Basic也提供了強(qiáng)大的創(chuàng)建菜單功能是程序更加標(biāo)準(zhǔn)。

您可以使用Visual Basic的Application Wizard也可以使用Visual Basic 的菜單編輯器建立菜單或者修改已經(jīng)存在的菜單。

實(shí)現(xiàn)工具欄

CoolBar控件與Office97種看到的CoolBar是類似的。CoolBar就是一個可以在窗體上浮動的工具,同時也是其他ActiveX的容器。通過在CoolBar中遷入其他空間你局可以向用戶提供更好的靈活性和義用性。

Toolbar 是工具條控件,是實(shí)現(xiàn)工具條的主體。其中的按鈕可以顯示圖像和標(biāo)題,并按功能分組或加入分隔符,還可以圍棋設(shè)置鼠標(biāo)停留在其上顯示的提示字符。Toolbar也是一個控件容器且具有Style屬性,并可以為其增加下拉按鈕和平滑按鈕等。

選擇“工程”下拉菜單中的“部件”選項(xiàng),顯示“部件”對話框。在“控件”選項(xiàng)卡列表中選擇“Microsoft Windows Common Controls 6.0”后工具相中增加改控件。其屬性及對象如下:

1. Align屬性定義工具條在窗體中的位置

2. ToolTipText屬性是字符串類型,定義控件的提示字符

3. Style屬性定義按鈕外觀。

4. ImageList屬性定義與數(shù)據(jù)條對應(yīng)的ImageList控件名,該控件定義工具條按鈕顯示的圖像。

5. HotImangeList屬性設(shè)置一個ImageList控件名,該控件定義按鈕獲得熱點(diǎn)時顯示的圖像。

6. DisabledImageList屬性定義工具條按鈕無效時顯示的圖像。

創(chuàng)建工具條包括ImageList和Toolbar控件

ImageList用于為其他控件提供圖像庫,將ImageList控件加入到工具箱的操作于前述Toolbar控件相同。

幫助

專業(yè)水平的軟件通常都帶有聯(lián)機(jī)幫助功能。無論寫出來的程序是要給大量的用戶使用,還是僅僅局限于公司內(nèi)部有限的使用者,我們都應(yīng)該為用戶提供詳細(xì)的、易于理解的聯(lián)機(jī)幫助文檔。微軟的Help Workshop4.0 是一套獨(dú)立于Visual Basic 的用來協(xié)助我們創(chuàng)建、運(yùn)行于32位Windows 操作系統(tǒng)下的幫助文件的工具。使用它我們可以為我們編寫的應(yīng)用程序生成一組幫助文件。

關(guān)于版本

為了是程序顯得更具有專業(yè)風(fēng)格,首先可以在其中加入通常的應(yīng)用程序信息。這些信息包括公司名稱、版本號、修訂號以及其他類似信息。Visual Basic允許你使用APP對象來保存這些信息,APP對象是一個預(yù)定義對象,不需要在程序中創(chuàng)建它。APP對象的大多數(shù)屬性被應(yīng)用程序用來提供常規(guī)的信息,通過使用這些APP提供的屬性,可以在應(yīng)用程序和用戶之間交流重要信息,在項(xiàng)目屬性框中可以設(shè)置它的屬性。

第四章

使用Access2000 實(shí)現(xiàn)關(guān)系型數(shù)據(jù)庫

數(shù)據(jù)庫的概念

數(shù)據(jù)庫是一種存儲數(shù)據(jù)并對數(shù)據(jù)進(jìn)行操作的工具。數(shù)據(jù)庫的作用在于組織和表達(dá)信息,簡而言之,數(shù)據(jù)庫就是信息的集合。計算機(jī)的數(shù)據(jù)庫可以分為兩類:非關(guān)系數(shù)據(jù)庫(flat-file)和關(guān)系數(shù)據(jù)庫(relational)。關(guān)系數(shù)據(jù)庫中包含了多個數(shù)據(jù)表的信息,數(shù)據(jù)庫含有各個不同部分的術(shù)語,象記錄、域等。

新建一個數(shù)據(jù)庫

創(chuàng)建任何一個數(shù)據(jù)庫的第一步是仔細(xì)的規(guī)劃數(shù)據(jù)庫,設(shè)計必須是靈活的、有邏輯的。創(chuàng)建一個數(shù)據(jù)庫結(jié)構(gòu)的過程被認(rèn)為是數(shù)據(jù)模型設(shè)計。

1. 標(biāo)識需要的數(shù)據(jù);

2. 收集被標(biāo)識的字段到表中;

3. 標(biāo)識主關(guān)鍵字字段;

4. 繪制一個簡單的數(shù)據(jù)圖表;

5. 規(guī)范數(shù)據(jù);

6. 標(biāo)識指定字段的信息;

7. 創(chuàng)建物理表。

修改已建的數(shù)據(jù)庫

數(shù)據(jù)庫的修改分為:添加、編輯和刪除記錄。這三種操作均可由Visual Basic 創(chuàng)建的程序來完成,下面的章節(jié)將詳細(xì)描述實(shí)現(xiàn)的具體方法。

實(shí)現(xiàn)數(shù)據(jù)庫之間的聯(lián)系

數(shù)據(jù)庫之間的關(guān)系指明兩個庫之間共享一個共同的關(guān)鍵字值。一個連接是指一種虛擬的表,這種表是在當(dāng)用戶要求從相互關(guān)聯(lián)的各個不同的表中獲取信息時建立的,關(guān)鍵字段用于在相互連接的不同表中查找匹配的記錄。一個更高級的連接形式稱為自連接。這種連接是指一個表被連接到它自己的一個字段,或在不同的紀(jì)錄中由重復(fù)數(shù)據(jù)的組合字段。數(shù)據(jù)庫中有三種不同類型的關(guān)鍵字:主關(guān)鍵字、組合關(guān)鍵字和外關(guān)鍵字。在表中使用的關(guān)鍵字類型用于描述庫表示什么以及在數(shù)據(jù)庫中如何與其它的庫建立關(guān)系。

第五章

系統(tǒng)總體規(guī)劃

系統(tǒng)功能

1. 可以進(jìn)行文本操作;

2. 添加一個數(shù)據(jù)庫項(xiàng)目;

3. 刪除一個數(shù)據(jù)庫項(xiàng)目;

4. 修改一個數(shù)據(jù)庫項(xiàng)目;

5. 查詢信息;

6. 察看課程表。

流程圖

第六章

系統(tǒng)具體實(shí)現(xiàn)

用戶界面的實(shí)現(xiàn)

6.1.1 封面

具體實(shí)現(xiàn)見 圖_6.1.1

圖_6.1.1

6.1.2 主界面

具體實(shí)現(xiàn)見.圖_6.1.2

圖_6.1.2

主界面包含三方面的內(nèi)容,以下一一介紹:

1.記錄操作

打開記錄操作,進(jìn)入記錄操作菜單項(xiàng)分別由文件、視圖及幫助三個選項(xiàng)。

1.1文件包括:新建

打開

打開寫字板---------如圖6.1.4 (源程序見附錄清單6.1 )

保存

另存

打印

退出

圖6.1.4

1.2視圖包括:狀態(tài)條

工具欄

背景顏色

顯示

課程表---------如圖6.1.5

文本編輯器

網(wǎng)絡(luò)瀏覽

圖6.1.5

1. 3幫助包括:內(nèi)容

關(guān)于幫助

2.記錄操作

打開記錄操作進(jìn)入記錄操作選項(xiàng)頁分別由瀏覽記錄、查找等三個選項(xiàng)組成。

2.1瀏覽記錄:

學(xué)生學(xué)籍庫

課程庫

成績庫

2.2查找記錄

2.3備注

3.系統(tǒng)信息

打開系統(tǒng)信息進(jìn)入選項(xiàng)頁分別由系統(tǒng)信息、信息采集等組成。

6.1.3 幫助系統(tǒng)

具體實(shí)現(xiàn)見6.1.3

圖6.1.3

數(shù)據(jù)庫的實(shí)現(xiàn)

6.2.1學(xué)籍?dāng)?shù)據(jù)庫

學(xué)籍?dāng)?shù)據(jù)庫里存儲了學(xué)生的檔案包括:學(xué)號、姓名、年齡等 表如6.2.6

列名(中文)列名(英文)數(shù)據(jù)類型寬度小數(shù)點(diǎn)位數(shù)是否為空姓名Name Date8No學(xué)號CodeInteger6No性別SexDate2No年齡AgeDate6No民族NationDate6No政治面貌Visage...Date2...Yes...家庭住址AddressDate10No備注RecordDate15No 表6.2.6

學(xué)籍模塊:

該模塊主要完成學(xué)生基本信息的錄入、刪除 、更新等功能。在此模塊中定義了八個域名來進(jìn)行學(xué)生的信息存儲。如果用戶修改某一紀(jì)錄中的某一項(xiàng),可單添加按鈕進(jìn)行學(xué)生記錄的編輯,此窗口使用數(shù)據(jù)窗口的FREEDOM風(fēng)格(典型的錄入界面)。該種風(fēng)格特點(diǎn)是列標(biāo)題緊挨著數(shù)據(jù)列在此窗口還可以增加新學(xué)生紀(jì)錄。

6.2.2成績數(shù)據(jù)庫

成績數(shù)據(jù)庫里存儲了學(xué)生的成績包括:學(xué)號、成績、等如表6.2.7

列名(中文)列名(英文)數(shù)據(jù)類型寬度小數(shù)點(diǎn)位數(shù)是否為空姓名Name Date8No學(xué)號CodeInteger6No成績ScoreDate10No備注RecordDate15No 表6.2.7

成績模塊:

該模塊主要完成學(xué)生成績的基本信息的錄入、刪除 、更新等功能。在此模塊中定義了四個域名來進(jìn)行學(xué)生的信息存儲。

6.2.3課程數(shù)據(jù)庫

課程數(shù)據(jù)庫利存儲了課程的信息:課程名、作者、出版社等如表6.2.8

列名(中文)列名(英文)數(shù)據(jù)類型寬度小數(shù)點(diǎn)位數(shù)是否為空課程IDCourseDate8No課程名NameDate15No出版社PublisherDate20No作者ScoreDate18No備注RecordDate15No 表6.2.8

課程模塊:

該模塊主要完成存儲課程的所有信息及錄入、刪除 、更新等功能

與VB的連接

Visual Basic提供了與底層數(shù)據(jù)庫系統(tǒng)緊密的連接。Visual Basic 支持不同的關(guān)系數(shù)據(jù)庫管理系統(tǒng)并充分發(fā)揮每一個數(shù)據(jù)庫的特長。生成獨(dú)立應(yīng)用或脫離服務(wù)器運(yùn)行的服務(wù)以上的應(yīng)用,Visual Basic連接數(shù)據(jù)庫的方式有兩種:

·通過使用Visual Basic的 DATA控件。

·通過使用由Visual Basic提供的專用的直接與數(shù)據(jù)庫相連的接口

第七章

結(jié)束語

經(jīng)過三個多月的設(shè)計和開發(fā),中小學(xué)檔案管理系統(tǒng)基本開發(fā)完畢。其功能基本符合用戶需求,能夠完成學(xué)生學(xué)籍的存儲和成績的查詢以及各類相關(guān)報表的打印。并提供部分系統(tǒng)維護(hù)功能,使用戶方便進(jìn)行數(shù)據(jù)備份和恢復(fù)、數(shù)據(jù)刪除。,對于數(shù)據(jù)的一致性的問題也通過程序進(jìn)行了有效的解決。

但是由于畢業(yè)設(shè)計時間較短,所以該系統(tǒng)還有許多不盡如人意的地方,比如聯(lián)機(jī)文檔比較少,用戶界面不夠美觀,出錯處理不夠等多方面問題。這些都有待進(jìn)一步改善。

致謝

在本次畢業(yè)設(shè)計中,我從指導(dǎo)老師雷震甲老師身上學(xué)到了很多東西。雷老師認(rèn)真負(fù)責(zé)的工作態(tài)度,嚴(yán)謹(jǐn)?shù)闹螌W(xué)精神和深厚的理論水平都使我收益匪淺。他無論在理論上還是在實(shí)踐中,都給與我很大的幫助,使我得到不少的提高這對于我以后的工作和學(xué)習(xí)都有一種巨大的幫助,感謝他耐心的輔導(dǎo)。

另外,在系統(tǒng)開發(fā)過程中雷老師的助手張彥明老師也給于我很大的幫助,幫助解決了不少的難點(diǎn),使得系統(tǒng)能及時開發(fā)完成,還有同組的同學(xué)同樣給與我不少幫助,這里一并表示感謝。

第八章

主要參考文獻(xiàn)

[1] Visual Basic 6.0 使用指南

作者:Bob Reselman , Richard Peasley , Wayne Pruchniak.

出版社:電子工業(yè)出版社

[2] 中文版Microsoft Office 97 自學(xué)通

作者:Ned Snell

出版社:機(jī)械工業(yè)出版社

[3] Visual Basic 6.0 中文版控件大全

作者:Microsoft

出版社;電子工業(yè)出版社

[4] 中文Access 2000 24學(xué)時教程

作者:Craig Eddy ,Timothy Buchanan

出版社:機(jī)械工業(yè)出版社

附錄程序清單及注釋

程序清單6.1

Option Explicit

Dim FileName As String '文件名,用于打開、保存文件

Dim UndoString As String '用于 Undo 操作

Dim UndoNew As String '用于 Undo 操作

Private Sub ImgUndoDisable()

'禁用“Undo”按鈕

UndoString = ""

UndoNew = ""

ImgUndo.Enabled = False

ImgUndo.Picture = ImageDisable.ListImages("Undo").Picture

End Sub

Private Sub ImgUndoEnable()

'有效“Undo”按鈕

ImgUndo.Enabled = True

ImgUndo.Picture = ImageUp.ListImages("Undo").Picture

End Sub

Private Sub Check_ImgPaste()

'設(shè)置粘貼按鈕

If Len(Clipboard.GetText) 0 Then

ImgPaste.Enabled = True

ImgPaste.Picture = ImageUp.ListImages("Paste").Picture

Else

ImgPaste.Enabled = False

ImgPaste.Picture = ImageDisable.ListImages("Paste").Picture

End If

End Sub

Private Sub Check_ImgCutCopy()

'設(shè)置剪切、復(fù)制按鈕

If Text1.SelLength 0 Then

ImgCut.Enabled = True

ImgCut.Picture = ImageUp.ListImages("Cut").Picture

ImgCopy.Enabled = True

ImgCopy.Picture = ImageUp.ListImages("Copy").Picture

Else

ImgCut.Enabled = False

ImgCut.Picture = ImageDisable.ListImages("Cut").Picture

ImgCopy.Enabled = False

ImgCopy.Picture = ImageDisable.ListImages("Copy").Picture

End If

End Sub

Private Sub BackColor_Click()

CommonDialog1.ShowColor

Text1.BackColor = CommonDialog1.Color

End Sub

Private Sub Box_Click()

'顯停工具欄

If Box.Checked Then

'將停顯工具欄

Box.Checked = False

CoolBar1.Visible = False

Else

Box.Checked = True

CoolBar1.Visible = True

End If

Form_Resize '重新調(diào)整控件位置

End Sub

Private Sub Close_Click()

Dim FileNum As Integer

If Len(FileName) 0 Then

'有輸入文件名

FileNum = FreeFile() '獲得可用文件號

Open FileName For Output As FileNum '打開輸出文件

'如果無指定文件,則創(chuàng)建新文件

Print #FileNum, Text1.Text '輸出文本

Close FileNum '關(guān)閉文件

End If

Text1.Text = ""

FileName = ""

End Sub

Private Sub ComboSize_Click()

Text1.FontSize = Val(ComboSize.Text)

End Sub

Private Sub ComboFont_Click()

Text1.FontName = ComboFont.Text

End Sub

Private Sub Copy_Click()

Clipboard.SetText Text1.SelText '復(fù)制文本到剪裁板

End Sub

Private Sub Cut_Click()

Clipboard.SetText Text1.SelText '復(fù)制文本到剪裁板

Text1.SelText = "" '清選擇的文本

End Sub

Private Sub DataTime_Click()

Text1.SelText = Now

End Sub

Private Sub 刪除_Click()

Text1.SelText = "" '清選擇的文本

End Sub

Private Sub Edit_Click()

'當(dāng)程序顯示“編輯”子菜單前,觸發(fā)該程序

If Text1.SelLength 0 Then

'文本框中有選中的文本

Cut.Enabled = True

Copy.Enabled = True

刪除.Enabled = True

Else

Cut.Enabled = False

Copy.Enabled = False

刪除.Enabled = False

End If

If Len(Clipboard.GetText()) 0 Then

'剪裁板中有文本數(shù)據(jù)

Paste.Enabled = True

Else

'沒有可粘貼的文本

Paste.Enabled = False

End If

End Sub

Private Sub Exit_Click()

Unload Me

End Sub

Private Sub FindText_KeyPress(KeyAscii As Integer)

Dim BeginPos As Long

If KeyAscii = 13 Then

BeginPos = InStr(1, Text1.Text, FindText.Text, vbTextCompare)

If BeginPos 0 Then

Text1.SelStart = BeginPos - 1

Text1.SelLength = Len(FindText.Text)

End If

End If

End Sub

Private Sub Fontcolor_Click()

CommonDialog1.ShowColor

Text1.ForeColor = CommonDialog1.Color

End Sub

Private Sub Form_Load()

Dim i As Integer

'加載圖像

ImgNew.Picture = ImageUp.ListImages("New").Picture

ImgOpen.Picture = ImageUp.ListImages("Open").Picture

ImgSave.Picture = ImageUp.ListImages("Save").Picture

ImgUndo.Picture = ImageDisable.ListImages("Undo").Picture

Check_ImgPaste

Check_ImgCutCopy

'加載系統(tǒng)字體

For i = 0 To Screen.FontCount - 1

ComboFont.AddItem Screen.Fonts(i)

Next i

End Sub

Private Sub Form_Resize()

Dim TextTop As Long

'修改工具條大小

CoolBar1.Top = Me.ScaleTop

?????????????????????????????

??????????????????????????????????

???????????

????????????????????????????

??????????

????????????????????????????????????????????

????????

???????????????????

??????????

?????????????????????????????????????

???????????????? Me.ScaleLeft

Text1.Width = Me.ScaleWidth

If Me.ScaleHeight CoolBar1.Height Then

Text1.Height = Me.ScaleHeight - TextTop

Else

Text1.Height = 0

End If

End Sub

Private Sub ImgCopy_Click()

Copy_Click '復(fù)制

Check_ImgPaste

Check_ImgCutCopy

End Sub

Private Sub ImgCopy_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

'“按下”按鈕

If Button = 1 Then

ImgCopy.Picture = ImageDown.ListImages("Copy").Picture

End If

End Sub

Private Sub ImgCopy_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

Label1 = "將選擇的文本復(fù)制到剪裁板"

'判斷鼠標(biāo)位置,顯示不同圖像

If Button = 1 And (X 0 And X ImgNew.Width And Y 0 And Y ImgNew.Height) Then

ImgCopy.Picture = ImageDown.ListImages("Copy").Picture

ElseIf Button = 1 Then

ImgCopy.Picture = ImageUp.ListImages("Copy").Picture

End If

End Sub

Private Sub ImgCopy_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = 1 Then

'“抬起”按鈕

ImgCopy.Picture = ImageUp.ListImages("Copy").Picture

End If

End Sub

Private Sub ImgCut_Click()

'If Text1.SelLength 0 Then

Cut_Click '剪切

Check_ImgPaste

Check_ImgCutCopy

'End If

End Sub

Private Sub ImgCut_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = 1 Then

'“按下”按鈕

ImgCut.Picture = ImageDown.ListImages("Cut").Picture

End If

End Sub

Private Sub ImgCut_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

Label1 = "剪切選擇的文字到剪裁板"

'判斷鼠標(biāo)位置,顯示不同圖像

If Button = 1 And (X 0 And X ImgNew.Width And Y 0 And Y ImgNew.Height) Then

ImgCut.Picture = ImageDown.ListImages("Cut").Picture

ElseIf Button = 1 Then

ImgCut.Picture = ImageUp.ListImages("Cut").Picture

End If

End Sub

Private Sub ImgCut_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = 1 Then

'“抬起”按鈕

ImgCut.Picture = ImageUp.ListImages("C

C語言程序設(shè)計:班級電話本管理程序

/* 電話簿程序 */

/******頭文件(.h)***********/

#include "stdio.h" /*I/O函數(shù)*/

#include "stdlib.h" /*標(biāo)準(zhǔn)庫函數(shù)*/

#include "string.h"/*字符串函數(shù)*/

#include "ctype.h" /*字符操作函數(shù)*/

#define M 50 /*定義常數(shù)表示記錄數(shù)*/

struct unit/*定義數(shù)據(jù)結(jié)構(gòu)*/

{

char name[20]; /*姓名*/

char units[30]; /*單位*/

char tele[10]; /*電話*/

};

typedef struct unit ADDRESS;

/******以下是函數(shù)原型*******/

int enter(ADDRESS t[]); /*輸入記錄*/

void list(ADDRESS t[],int n); /*顯示記錄*/

void search(ADDRESS t[],int n); /*按姓名查找顯示記錄*/

int delete(ADDRESS t[],int n); /*刪除記錄*/

int add(ADDRESS t[],int n); /*插入記錄*/

void save(ADDRESS t[],int n); /*記錄保存為文件*/

int load(ADDRESS t[]); /*從文件中讀記錄*/

void display(ADDRESS t[]); /*按序號查找顯示記錄*/

void sort(ADDRESS t[],int n); /*按姓名排序*/

void qseek(ADDRESS t[],int n); /*快速查找記錄*/

void copy(); /*文件復(fù)制*/

void print(ADDRESS temp); /*顯示單條記錄*/

int find(ADDRESS t[],int n,char *s) ; /*查找函數(shù)*/

int menu_select(); /*主菜單函數(shù)*/

/******主函數(shù)開始*******/

main()

{

int i;

ADDRESS adr[M]; /*定義結(jié)構(gòu)體數(shù)組*/

int length; /*保存記錄長度*/

clrscr(); /*清屏*/

for(;;)/*無限循環(huán)*/

{

switch(menu_select()) /*調(diào)用主菜單函數(shù),返回值整數(shù)作開關(guān)語句的條件*/

{

case 0:length=enter(adr);break;/*輸入記錄*/

case 1:list(adr,length);break; /*顯示全部記錄*/

case 2:search(adr,length);break; /*查找記錄*/

case 3:length=delete(adr,length);break; /*刪除記錄*/

case 4:length=add(adr,length); break; /*插入記錄*/

case 5:save(adr,length);break; /*保存文件*/

case 6:length=load(adr); break; /*讀文件*/

case 7:display(adr);break; /*按序號顯示記錄*/

case 8:sort(adr,length);break; /*按姓名排序*/

case 9:qseek(adr,length);break; /*快速查找記錄*/

case 10:copy();break; /*復(fù)制文件*/

case 11:exit(0); /*如返回值為11則程序結(jié)束*/

}

}

}

/*菜單函數(shù),函數(shù)返回值為整數(shù),代表所選的菜單項(xiàng)*/

menu_select()

{

char s[80];

int c;

gotoxy(1,25);/*將光標(biāo)定為在第25行,第1列*/

printf("press any key enter menu......\n");/*提示壓任意鍵繼續(xù)*/

getch(); /*讀入任意字符*/

clrscr(); /*清屏*/

gotoxy(1,1);

printf("********************MENU*********************\n\n");

printf(" 0. Enter record\n");

printf(" 1. List the file\n");

printf(" 2. Search record on name\n");

printf(" 3. Delete a record\n");

printf(" 4. add record \n");

printf(" 5. Save the file\n");

printf(" 6. Load the file\n");

printf(" 7. display record on order\n");

printf(" 8. sort to make new file\n");

printf(" 9. Quick seek record\n");

printf(" 10. copy the file to new file\n");

printf(" 11. Quit\n");

printf("***********************************************\n");

do{

printf("\n Enter you choice(0~11):"); /*提示輸入選項(xiàng)*/

scanf("%s",s); /*輸入選擇項(xiàng)*/

c=atoi(s); /*將輸入的字符串轉(zhuǎn)化為整型數(shù)*/

}while(c0||c11); /*選擇項(xiàng)不在0~11之間重輸*/

return c; /*返回選擇項(xiàng),主程序根據(jù)該數(shù)調(diào)用相應(yīng)的函數(shù)*/

}

/***輸入記錄,形參為結(jié)構(gòu)體數(shù)組,函數(shù)值返回類型為整型表示記錄長度*/

int enter(ADDRESS t[])

{

int i,n;

char *s;

clrscr(); /*清屏*/

printf("\nplease input num \n"); /*提示信息*/

scanf("%d",n); /*輸入記錄數(shù)*/

printf("please input record \n"); /*提示輸入記錄*/

printf("name unit telephone\n");

printf("------------------------------------------------\n");

for(i=0;in;i++)

{

scanf("%s%s%s",t[i].name,t[i].units,t[i].tele); /*輸入記錄*/

printf("----------------------------------------------\n");

}

return n; /*返回記錄條數(shù)*/

}

/*顯示記錄,參數(shù)為記錄數(shù)組和記錄條數(shù)*/

void list(ADDRESS t[],int n)

{

int i;

clrscr();

printf("\n\n*******************ADDRESS******************\n");

printf("name unit telephone\n");

printf("------------------------------------------------\n");

for(i=0;in;i++)

printf("%-20s%-30s%-10s\n",t[i].name,t[i].units,t[i].tele);

if((i+1)%10==0) /*判斷輸出是否達(dá)到10條記錄*/

{

printf("Press any key continue...\n"); /*提示信息*/

getch(); /*壓任意鍵繼續(xù)*/

}

printf("************************end*******************\n");

}

/*查找記錄*/

void search(ADDRESS t[],int n)

{

char s[20]; /*保存待查找姓名字符串*/

int i; /*保存查找到結(jié)點(diǎn)的序號*/

clrscr(); /*清屏*/

printf("please search name\n");

scanf("%s",s); /*輸入待查找姓名*/

i=find(t,n,s); /*調(diào)用find函數(shù),得到一個整數(shù)*/

if(in-1) /*如果整數(shù)i值大于n-1,說明沒找到*/

printf("not found\n");

else

print(t[i]); /*找到,調(diào)用顯示函數(shù)顯示記錄*/

}

/*顯示指定的一條記錄*/

void print(ADDRESS temp)

{

clrscr();

printf("\n\n********************************************\n");

printf("name unit telephone\n");

printf("------------------------------------------------\n");

printf("%-20s%-30s%-10s\n",temp.name,temp.units,temp.tele);

printf("**********************end***********************\n");

}

/*查找函數(shù),參數(shù)為記錄數(shù)組和記錄條數(shù)以及姓名s */

int find(ADDRESS t[],int n,char *s)

{

int i;

for(i=0;in;i++)/*從第一條記錄開始,直到最后一條*/

{

if(strcmp(s,t[i].name)==0) /*記錄中的姓名和待比較的姓名是否相等*/

return i; /*相等,則返回該記錄的下標(biāo)號,程序提前結(jié)結(jié)束*/

}

return i; /*返回i值*/

}

/*刪除函數(shù),參數(shù)為記錄數(shù)組和記錄條數(shù)*/

int delete(ADDRESS t[],int n)

{

char s[20]; /*要刪除記錄的姓名*/

int ch=0;

int i,j;

printf("please deleted name\n"); /*提示信息*/

scanf("%s",s);/*輸入姓名*/

i=find(t,n,s); /*調(diào)用find函數(shù)*/

if(in-1) /*如果in-1超過了數(shù)組的長度*/

printf("no found not deleted\n"); /*顯示沒找到要刪除的記錄*/

else

{

print(t[i]); /*調(diào)用輸出函數(shù)顯示該條記錄信息*/

printf("Are you sure delete it(1/0)\n"); /*確認(rèn)是否要刪除*/

scanf("%d",ch); /*輸入一個整數(shù)0或1*/

if(ch==1) /*如果確認(rèn)刪除整數(shù)為1*/

{

for(j=i+1;jn;j++) /*刪除該記錄,實(shí)際后續(xù)記錄前移*/

{

strcpy(t[j-1].name,t[j].name); /*將后一條記錄的姓名拷貝到前一條*/

strcpy(t[j-1].units,t[j].units); /*將后一條記錄的單位拷貝到前一條*/

strcpy(t[j-1].tele,t[j].tele); /*將后一條記錄的電話拷貝到前一條*/

}

n--; /*記錄數(shù)減1*/

}

}

return n; /*返回記錄數(shù)*/

}

/*插入記錄函數(shù),參數(shù)為結(jié)構(gòu)體數(shù)組和記錄數(shù)*/

int add(ADDRESS t[],int n)/*插入函數(shù),參數(shù)為結(jié)構(gòu)體數(shù)組和記錄數(shù)*/

{

ADDRESS temp; /*新插入記錄信息*/

int i,j;

char s[20]; /*確定插入在哪個記錄之前*/

printf("please input record\n");

printf("************************************************\n");

printf("name unit telephone\n");

printf("--------------------------------------------------\n");

scanf("%s%s%s",temp.name,temp.units,temp.tele); /*輸入插入信息*/

printf("------------------------------------------------\n");

printf("please input locate name \n");

scanf("%s",s); /*輸入插入位置的姓名*/

i=find(t,n,s); /*調(diào)用find,確定插入位置*/

for(j=n-1;j=i;j--) /*從最后一個結(jié)點(diǎn)開始向后移動一條*/

{

strcpy(t[j+1].name,t[j].name); /*當(dāng)前記錄的姓名拷貝到后一條*/

strcpy(t[j+1].units,t[j].units); /*當(dāng)前記錄的單位拷貝到后一條*/

strcpy(t[j+1].tele,t[j].tele); /*當(dāng)前記錄的電話拷貝到后一條*/

}

strcpy(t[i].name,temp.name); /*將新插入記錄的姓名拷貝到第i個位置*/

strcpy(t[i].units,temp.units); /*將新插入記錄的單位拷貝到第i個位置*/

strcpy(t[i].tele,temp.tele); /*將新插入記錄的電話拷貝到第i個位置*/

n++; /*記錄數(shù)加1*/

return n; /*返回記錄數(shù)*/

}

/*保存函數(shù),參數(shù)為結(jié)構(gòu)體數(shù)組和記錄數(shù)*/

void save(ADDRESS t[],int n)

{

int i;

FILE *fp; /*指向文件的指針*/

if((fp=fopen("record.txt","wb"))==NULL) /*打開文件,并判斷打開是否正常*/

{

printf("can not open file\n");/*沒打開*/

exit(1); /*退出*/

}

printf("\nSaving file\n"); /*輸出提示信息*/

fprintf(fp,"%d",n); /*將記錄數(shù)寫入文件*/

fprintf(fp,"\r\n"); /*將換行符號寫入文件*/

for(i=0;in;i++)

{

fprintf(fp,"%-20s%-30s%-10s",t[i].name,t[i].units,t[i].tele);/*格式寫入記錄*/

fprintf(fp,"\r\n"); /*將換行符號寫入文件*/

}

fclose(fp);/*關(guān)閉文件*/

printf("****save success***\n"); /*顯示保存成功*/

}

/*讀入函數(shù),參數(shù)為結(jié)構(gòu)體數(shù)組*/

int load(ADDRESS t[])

{

int i,n;

FILE *fp; /*指向文件的指針*/

if((fp=fopen("record.txt","rb"))==NULL)/*打開文件*/

{

printf("can not open file\n"); /*不能打開*/

exit(1); /*退出*/

}

fscanf(fp,"%d",n); /*讀入記錄數(shù)*/

for(i=0;in;i++)

fscanf(fp,"%20s%30s%10s",t[i].name,t[i].units,t[i].tele); /*按格式讀入記錄*/

fclose(fp); /*關(guān)閉文件*/

printf("You have success read data from file!!!\n"); /*顯示保存成功*/

return n; /*返回記錄數(shù)*/

}

/*按序號顯示記錄函數(shù)*/

void display(ADDRESS t[])

{

int id,n;

FILE *fp; /*指向文件的指針*/

if((fp=fopen("record.txt","rb"))==NULL) /*打開文件*/

{

printf("can not open file\n"); /*不能打開文件*/

exit(1); /*退出*/

}

printf("Enter order number...\n"); /*顯示信息*/

scanf("%d",id); /*輸入序號*/

fscanf(fp,"%d",n); /*從文件讀入記錄數(shù)*/

if(id=0idn) /*判斷序號是否在記錄范圍內(nèi)*/

{

fseek(fp,(id-1)*sizeof(ADDRESS),1); /*移動文件指針到該記錄位置*/

print(t[id]); /*調(diào)用輸出函數(shù)顯示該記錄*/

printf("\r\n");

}

else

printf("no %d number record!!!\n ",id); /*如果序號不合理顯示信息*/

fclose(fp); /*關(guān)閉文件*/

}

/*排序函數(shù),參數(shù)為結(jié)構(gòu)體數(shù)組和記錄數(shù)*/

void sort(ADDRESS t[],int n)

{

int i,j,flag;

ADDRESS temp; /*臨時變量做交換數(shù)據(jù)用*/

for(i=0;in;i++)

{

flag=0; /*設(shè)標(biāo)志判斷是否發(fā)生過交換*/

for(j=0;jn-1;j++)

if((strcmp(t[j].name,t[j+1].name))0) /*比較大小*/

{

flag=1;

strcpy(temp.name,t[j].name); /*交換記錄*/

strcpy(temp.units,t[j].units);

strcpy(temp.tele,t[j].tele);

strcpy(t[j].name,t[j+1].name);

strcpy(t[j].units,t[j+1].units);

strcpy(t[j].tele,t[j+1].tele);

strcpy(t[j+1].name,temp.name);

strcpy(t[j+1].units,temp.units);

strcpy(t[j+1].tele,temp.tele);

}

if(flag==0)break; /*如果標(biāo)志為0,說明沒有發(fā)生過交換循環(huán)結(jié)束*/

}

printf("sort sucess!!!\n"); /*顯示排序成功*/

}

/*快速查找,參數(shù)為結(jié)構(gòu)體數(shù)組和記錄數(shù)*/

void qseek(ADDRESS t[],int n)

{

char s[20];

int l,r,m;

printf("\nPlease sort before qseek!\n"); /*提示確認(rèn)在查找之前,記錄是否已排序*/

printf("please enter name for qseek\n"); /*提示輸入*/

scanf("%s",s); /*輸入待查找的姓名*/

l=0;r=n-1; /*設(shè)置左邊界與右邊界的初值*/

while(l=r) /*當(dāng)左邊界=右邊界時*/

{

m=(l+r)/2; /*計算中間位置*/

if(strcmp(t[m].name,s)==0) /*與中間結(jié)點(diǎn)姓名字段做比較判是否相等*/

{

print(t[m]); /*如果相等,則調(diào)用print函數(shù)顯示記錄信息*/

return ; /*返回*/

}

if(strcmp(t[m].name,s)0) /*如果中間結(jié)點(diǎn)小*/

l=m+1; /*修改左邊界*/

else

r=m-1; /*否則,中間結(jié)點(diǎn)大,修改右邊界*/

}

if(lr) /*如果左邊界大于右邊界時*/

printf("not found\n"); /*顯示沒找到*/

}

/*復(fù)制文件*/

void copy()

{

char outfile[20]; /*目標(biāo)文件名*/

int i,n;

ADDRESS temp[M]; /*定義臨時變量*/

FILE *sfp,*tfp; /*定義指向文件的指針*/

clrscr();/*清屏*/

if((sfp=fopen("record.txt","rb"))==NULL) /*打開記錄文件*/

{

printf("can not open file\n"); /*顯示不能打開文件信息*/

exit(1); /*退出*/

}

printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示信息*/

scanf("%s",outfile); /*輸入目標(biāo)文件名*/

if((tfp=fopen(outfile,"wb"))==NULL) /*打開目標(biāo)文件*/

{

printf("can not open file\n"); /*顯示不能打開文件信息*/

exit(1); /*退出*/

}

fscanf(sfp,"%d",n); /*讀出文件記錄數(shù)*/

fprintf(tfp,"%d",n);/*寫入目標(biāo)文件數(shù)*/

fprintf(tfp,"\r\n"); /*寫入換行符*/

for(i=0;in;i++)

{

fscanf(sfp,"%20s%30s%10s\n",temp[i].name,temp[i].units,

temp[i].tele); /*讀入記錄*/

fprintf(tfp,"%-20s%-30s%-10s\n",temp[i].name,

temp[i].units,temp[i].tele); /*寫入記錄*/

fprintf(tfp,"\r\n"); /*寫入換行符*/

}

fclose(sfp); /*關(guān)閉源文件*/

fclose(tfp); /*關(guān)閉目標(biāo)文件*/

printf("you have success copy file!!!\n"); /*顯示復(fù)制成功*/

}

關(guān)于班級管理的流程圖

(1)任命班長

(2)授予班長挑選副班長以及其他班委員的權(quán)力,

(3)授予班委任命、管理小組長的權(quán)力

(4)授予小組長管理組員的權(quán)力

結(jié)束!

軟件開發(fā)流程圖示例關(guān)于班級管理的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于軟件開發(fā)如何管理、軟件開發(fā)流程圖示例關(guān)于班級管理的信息別忘了在本站進(jìn)行查找喔。

掃碼二維碼