軟件開發(fā)流程圖示例關(guān)于班級(jí)管理(軟件開發(fā)如何管理)
本篇文章給大家談?wù)勡浖_發(fā)流程圖示例關(guān)于班級(jí)管理,以及軟件開發(fā)如何管理對(duì)應(yīng)的知識(shí)點(diǎn),希望對(duì)各位有所幫助,不要忘了收藏本站喔。
本文目錄一覽:
- 1、用C編寫班級(jí)成績(jī)管理系統(tǒng)
- 2、VB數(shù)據(jù)流程圖
- 3、C語(yǔ)言程序設(shè)計(jì):班級(jí)電話本管理程序
- 4、關(guān)于班級(jí)管理的流程圖
用C編寫班級(jí)成績(jī)管理系統(tǒng)
C語(yǔ)言課程設(shè)計(jì)報(bào)告—班級(jí)成績(jī)管理系統(tǒng)
需要分析:
學(xué)生成績(jī)管理系統(tǒng)有13種功能。把這13個(gè)功能做成13個(gè)子函數(shù)。在主函當(dāng)數(shù)中設(shè)計(jì)一個(gè)菜單對(duì)這13個(gè)子數(shù)進(jìn)行管理。來(lái)實(shí)現(xiàn)對(duì)整個(gè)系統(tǒng)的操作。
根據(jù)課題的要求。每一個(gè)學(xué)生的包括姓名(char)、學(xué)號(hào)(char)、M門課程的成績(jī)(float).再加上系統(tǒng)功能上的要求每一學(xué)生的信息還要總分和名次等。所以自然的想到要用結(jié)構(gòu)體來(lái)定義每一個(gè)學(xué)生的信息結(jié)構(gòu)。然后用鏈表把它們組成一個(gè)有序的整體。用對(duì)鏈表的操作來(lái)實(shí)現(xiàn)對(duì)所有學(xué)生信息的統(tǒng)一管理(成績(jī)顯示、成績(jī)排序、成績(jī)修改等)。最后為了以后按照處理后的順序保存到文件中。
. 各函數(shù)的功能:
概要設(shè)計(jì):
程序的模塊組成:
主 函 數(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)
計(jì)算總分和均分函數(shù): void computer(STUDENT *h)
修改函數(shù): STUDENT *Modify(STUDENT *head,STUDENT *new)
按學(xué)號(hào)排序函數(shù): STUDENT *index(STUDENT *h)
菜單函數(shù):int menu_select()
各個(gè)函數(shù)的主要功能:
輸入函數(shù): 隨時(shí)輸入數(shù)據(jù)。
菜單函數(shù):顯示系統(tǒng)主菜單。
顯示函數(shù): 顯示所有學(xué)生的信息。
尋找函數(shù): 方便學(xué)生查找自己的成績(jī)。
刪除函數(shù): 刪除某學(xué)生的信息。
排序函數(shù): 按總成績(jī)排序。
按學(xué)號(hào)排序函數(shù): 按學(xué)號(hào)排序。
插入函數(shù): 可以插入新的信息。
保存函數(shù): 保存好學(xué)生成績(jī),以免丟失。
統(tǒng)計(jì)函數(shù):
l 顯示每門課程成績(jī)最高的學(xué)生的基本信息。
l 顯示每門課程的平均成績(jī)。
l 顯示超過(guò)某門課程平均成績(jī)的學(xué)生人數(shù)。
課題的功能模塊的劃分:
開始
菜單界面
功能選擇
初始化函數(shù)
輸入學(xué)生信息
刪除學(xué)生信息
顯示學(xué)生信息
查找學(xué)生信息
按成績(jī)排序
保存到文件
從文件讀數(shù)據(jù)
插入學(xué)生成績(jī)
分類合計(jì)
退出系統(tǒng)
結(jié)束
詳細(xì)設(shè)計(jì): 整個(gè)系統(tǒng)除了主函數(shù)外,另外還有14個(gè)函數(shù),實(shí)現(xiàn)八大功能:輸入功能、顯示功能、查找功能、排序功能、插入功能、保存功能、讀取功能。各個(gè)函數(shù)的詳細(xì)設(shè)計(jì)說(shuō)明分別如下:
主函數(shù) main()
利用無(wú)限次循環(huán)for(;;)和swithch()實(shí)現(xiàn)各函數(shù)的調(diào)用,系統(tǒng)根據(jù)輸入的數(shù)字選項(xiàng)來(lái)調(diào)用相應(yīng)的函數(shù)。
菜單選擇函數(shù) int menu_select()
這是一個(gè)無(wú)參函數(shù),主要實(shí)現(xiàn)“功能選擇”的界面,在這個(gè)界面里有顯示系統(tǒng)的九大功能,根據(jù)每個(gè)功能前面的序號(hào)進(jìn)行選擇。等執(zhí)行完每一個(gè)函數(shù)功能后,返回菜單。
代碼設(shè)計(jì): 初始化函數(shù) STUDENT *init()
這是一個(gè)無(wú)參函數(shù),里面只有兩個(gè)語(yǔ)句,它的作用是使鏈表初始化,使head的值為NULL和一個(gè)清屏語(yǔ)句。比如:沒有這個(gè)函數(shù)的話,在你沒有輸入任何數(shù)據(jù)的情況下,去執(zhí)行顯示功能的時(shí)候會(huì)顯示一些亂碼!
輸入記錄函數(shù) STUDENT *create() 這是一個(gè)無(wú)參函數(shù),用來(lái)執(zhí)行學(xué)生成績(jī)記錄的輸入,當(dāng)學(xué)生為@時(shí)停止輸入,函數(shù)結(jié)束后,帶回一個(gè)鏈表頭的指針指向一下個(gè)學(xué)生的信息插在表頭。
N-S流程圖如下:
head=NULL無(wú)條件循環(huán)
指針p指向新開辟的單元
指針p是否為空
是 否
輸入學(xué)號(hào)p-num
輸出 p-num是否為@
內(nèi)存 是 否
溢出 輸入姓名p-name
停止 for(i=0;i3;i++)
輸入 輸入成績(jī)
返回 p-sum=s;
菜單 p-average=(float)s/3;
顯示記錄函數(shù) void print(STUDENT *head)
這是一個(gè)不返回值的有參函數(shù),形參為“鏈表頭的指針”,負(fù)責(zé)對(duì)全部學(xué)生成績(jī)記錄的輸出,不足之處就是不能對(duì)學(xué)生成績(jī)進(jìn)行分頁(yè)顯示。
算法:先將p結(jié)點(diǎn)的指針指向第一個(gè)結(jié)點(diǎn),將p結(jié)點(diǎn)(即第一個(gè)結(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,使指向第一個(gè)結(jié)點(diǎn)
輸出p所指向的結(jié)點(diǎn)
p指向一下個(gè)結(jié)點(diǎn)
當(dāng)p指的不是表尾
程序調(diào)試:
由于本課題中的許多知識(shí)點(diǎn)都沒有學(xué)過(guò)都要靠自己到課外的資料中去查找。在用的時(shí)候難免出現(xiàn)這樣那樣的錯(cuò)誤。如開始設(shè)計(jì)出來(lái)的菜單不是預(yù)想的那樣,而是總個(gè)窗中出現(xiàn)混亂。解決的這個(gè)問(wèn)題的辦法是調(diào)整。最后還是老師幫我?guī)臀覀冋业搅藛?wèn)題的所在——for 循環(huán)的次超過(guò)了鏈表中結(jié)點(diǎn)的數(shù)量。再就是自定義函數(shù)時(shí)由于課本的概念不清楚,多寫了空格鍵,以至函數(shù)調(diào)用不出來(lái)。又如:在設(shè)計(jì)修改學(xué)生信息時(shí)的密密碼時(shí)。當(dāng)用戶發(fā)現(xiàn)輸入密碼錯(cuò)誤按了退格鍵后,因?yàn)椤?”并沒有消去。導(dǎo)致用戶再次按退格鍵,又出現(xiàn)前面的情況。最終導(dǎo)致輸入密碼錯(cuò)誤。所以用了兩次退格鍵:
在對(duì)鏈表操作時(shí),要特別鏈表指針的移動(dòng)(p=p-next)和鏈表尾的判斷 (p= =NULL)。沒有指針的移動(dòng),就很容易出現(xiàn)死循環(huán)。而在運(yùn)行過(guò)程中不能控制。所以你就會(huì)認(rèn)為是死機(jī)。如果沒有鏈表尾的判斷。就會(huì)在運(yùn)行過(guò)程出現(xiàn)想不到的錯(cuò)誤。如:在顯示鏈表信息時(shí),后面就會(huì)出現(xiàn)亂碼。
一個(gè)系統(tǒng)的菜單和提示信息非常重要。如果沒有這些用戶根本不知道怎么用你設(shè)計(jì)的這個(gè)系統(tǒng)。在設(shè)計(jì)的調(diào)試過(guò)程中也無(wú)法順利的完成調(diào)試工作。有了一個(gè)清晰簡(jiǎn)單的菜單和一些提示信息這后,調(diào)試過(guò)程完成的非常順利。
予我耐心解答的老師和同學(xué),是他們?yōu)槲倚〕绦虻某晒ζ鸬搅岁P(guān)鍵性的作用,那么多個(gè)日夜,如此多的困難,同學(xué)們勤懇塌實(shí),從開始到結(jié)束,沒有顯出一點(diǎn)倦意,始終熱情高漲,我感謝這種氛圍,感謝學(xué)校提供的良好條件。
回顧起此次課程設(shè)計(jì),至今我仍感慨頗多,的確,從拿到題目到完成整個(gè)編程,從理論到實(shí)踐,在整整半個(gè)學(xué)期的日子里,可以學(xué)到很多很多的東西,同時(shí)不僅可以鞏固了以前所學(xué)過(guò)的知識(shí),而且學(xué)到了很多在書本上所沒有學(xué)到過(guò)的知識(shí)。通過(guò)這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過(guò)程中遇到問(wèn)題,可以說(shuō)得是困難重重,這畢竟第一次做的,難免會(huì)遇到過(guò)各種各樣的問(wèn)題,同時(shí)在設(shè)計(jì)的過(guò)程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過(guò)的知識(shí)理解得不夠深刻,掌握得不夠牢固,比如說(shuō)結(jié)構(gòu)體……通過(guò)這次課程設(shè)計(jì)之后,一定把以前所學(xué)過(guò)的知識(shí)重新溫故。
本次課程設(shè)計(jì)結(jié)束了,對(duì)于我的影響很大。我通過(guò)這次實(shí)踐學(xué)到了許多知識(shí)。學(xué)到了設(shè)計(jì)一個(gè)簡(jiǎn)單的系統(tǒng)。要注意哪些方面。也使我知道自己哪些方面做得還不夠。
但我出總結(jié)出了一點(diǎn)點(diǎn)的經(jīng)驗(yàn)如下:
1、要對(duì)系統(tǒng)的功能和要求做出詳細(xì)的分析,并合理分解任務(wù)。
2、把分解出來(lái)的子任務(wù),做給一個(gè)相對(duì)獨(dú)立的模塊。
3、在設(shè)計(jì)一個(gè)模塊之前,要簡(jiǎn)單構(gòu)想一下總界面的顯視情況。
4、針對(duì)構(gòu)想出來(lái)的界面進(jìn)行程序的編寫。
最后,感謝老師您對(duì)我的指導(dǎo)和從百忙中抽空看我的設(shè)計(jì),謝謝!
附件:
源程序:
#include "stdio.h" /*I/O函數(shù)*/
#include "stdlib.h" /*其它說(shuō)明*/
#include "string.h" /*字符串函數(shù)*/
#include "conio.h" /*屏幕操作函數(shù)*/
#include "mem.h" /*內(nèi)存操作函數(shù)*/
#include "ctype.h" /*字符操作函數(shù)*/
#include "alloc.h" /*動(dòng)態(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); /*計(jì)算總分和均分*/
STUDENT *Modify(STUDENT *h); /*修改記錄*/
void append(); /*追加記錄*/
STUDENT *sort(STUDENT *h); /*按總分排序*/
STUDENT *index(STUDENT *h); /*按學(xué)號(hào)排序*/
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(;;) /*無(wú)限循環(huán)*/
{
switch(menu_select()) /*調(diào)用主菜單函數(shù),返回值整數(shù)作開關(guān)語(yǔ)句的條件*/
{ /*值不同,執(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; /*計(jì)算總分和均分*/
case 8:head=Modify(head); break; /*修改記錄,一般會(huì)插在表尾*/
case 9:head=sort(head);break; /*按部分排序*/
case 10:append();break; /*追加記錄*/
case 11:head=index(head);break; /*按學(xué)號(hào)排序*/
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", /*計(jì)算所有學(xué)生的總分和均分*/
" 08. Modify an information ", /*修改某學(xué)號(hào)的信息*/
" 09. sort to make new file", /*排序*/
" 10. append record to file", /*追加記錄到文件中*/
" 11. index on nomber", /*按學(xué)號(hào)排序*/
" 12. Quit"}; /*退出*/
char s[3]; /*以字符形式保存選擇號(hào)*/
int c,i; /*定義整形變量*/
gotoxy(1,1); /*移動(dòng)光標(biāo)*/
textcolor(YELLOW); /*設(shè)置文本顯示顏色為黃色*/
textbackground(BLUE); /*設(shè)置背景顏色為藍(lán)色*/
gotoxy(10,2); /*移動(dòng)光標(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è)計(jì)*/
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); /*移動(dòng)光標(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)); /*申請(qǐng)空間*/
if(!info) /*如果指針info為空*/
{
printf("\nout of memory"); /*輸出內(nèi)存溢出*/
return NULL; /*返回空指針*/
}
inputs("enter no:",info-no,11); /*輸入學(xué)號(hào)并校驗(yàn)*/
if(info-no[0]=='@') { clrscr();break; } /*如果學(xué)號(hào)首字符為@則結(jié)束輸入,清屏后返回*/
inputs("enter name:",info-name,15); /*輸入姓名,并進(jìn)行校驗(yàn)*/
printf("please input %d score \n",N); /*提示開始輸入成績(jī)*/
s=0; /*計(jì)算每個(gè)學(xué)生的總分,初值為0*/
for(i=0;iN;i++) /*N門課程循環(huán)N次*/
{
do{
printf("score%d:",i+1); /*提示輸入第幾門課程*/
scanf("%d",info-score[i]); /*輸入成績(jī)*/
if(info-score[i]100||info-score[i]0) /*確保成績(jī)?cè)?~100之間*/
printf("bad data,repeat input\n"); /*出錯(cuò)提示信息*/
}while(info-score[i]100||info-score[i]0);
s=s+info-score[i]; /*累加各門課程成績(jī)*/
}
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)行長(zhǎng)度驗(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)行長(zhǎng)度校驗(yàn),超過(guò)count值重輸入*/
}while(strlen(p)count);
strcpy(s,p); /*將輸入的字符串拷貝到字符串s中*/
}
/*輸出鏈表中結(jié)點(diǎn)信息*/
void print(STUDENT *h)
{
int i=0; /* 統(tǒng)計(jì)記錄條數(shù)*/
STUDENT *p; /*移動(dòng)指針*/
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ǎng)h除的結(jié)點(diǎn)指針,q為其前驅(qū)指針*/
char s[12]; /*存放學(xué)號(hào)*/
char *pass="wenwei28";
char a[20],b=NULL;
int i=0;
clrscr();
printf("Input your password:");
while((i20)(b!='\r'))
{ b=getch(); /*無(wú)回顯輸入*/
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; /*密碼輸入完了,記得加個(gè)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); /*輸入要?jiǎng)h除記錄的學(xué)號(hào)*/
q=p=h; /*給q和p賦初值頭指針*/
while(strcmp(p-no,s)p!=NULL) /*當(dāng)記錄的學(xué)號(hào)不是要找的,或指針不為空時(shí)*/
{
q=p; /*將p指針值賦給q作為p的前驅(qū)指針*/
p=p-next; /*將p指針指向下一條記錄*/
}
if(p==NULL) /*如果p為空,說(shuō)明鏈表中沒有該結(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; /*最后一個(gè)結(jié)點(diǎn)的后繼指針為空*/
fclose(fp); /*關(guān)閉文件*/
printf("---You have success read data from file!!!---\n");
getch(); /*按任意鍵返回主菜單*/
clrscr();
return h; /*返回頭指針*/
}
/*成績(jī)統(tǒng)計(jì)*/
void computer(STUDENT *h)
{
STUDENT *p,*t,*q; /*定義移動(dòng)指針*/
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不為空時(shí)處理*/
{
s+=p-score[i]; /*累加總分*/
j++; /*統(tǒng)計(jì)記錄條數(shù)*/
p=p-next; /*指針后移*/
h; /*返回頭指針
VB數(shù)據(jù)流程圖
目錄
摘要
ABSTRACT
前言
第一章 為什么要開發(fā)一個(gè)學(xué)生檔案管理系統(tǒng)?
第二章 計(jì)算機(jī)已經(jīng)成為我們學(xué)習(xí)和工作的得力助手
1.1 在中小學(xué)中用計(jì)算機(jī)管理學(xué)生檔案的意義
1.2 為將來(lái)學(xué)校上網(wǎng)做好準(zhǔn)備
1.4 學(xué)生檔案的設(shè)計(jì)分析
第三章 怎樣開發(fā)一個(gè)學(xué)生檔案管理系統(tǒng)?
2.1 編程環(huán)境的選擇
2.2 關(guān)系型數(shù)據(jù)庫(kù)的實(shí)現(xiàn)
2.3 二者的結(jié)合(DBA)
第四章 Windows下的Visual Basic 編程環(huán)境簡(jiǎn)介
3.1 告別“hello world”的年代
3.2 面對(duì)對(duì)象的編程
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ù)庫(kù)
4.1 數(shù)據(jù)庫(kù)的概念
4.2 新建一個(gè)數(shù)據(jù)庫(kù)
4.3 修改已建的數(shù)據(jù)庫(kù)
4.4 實(shí)現(xiàn)數(shù)據(jù)庫(kù)之間的聯(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ù)庫(kù)的實(shí)現(xiàn)
6.2.1 學(xué)籍?dāng)?shù)據(jù)庫(kù)
6.2.2 學(xué)生成績(jī)庫(kù)
6.2.3 課程庫(kù)
6.3 與VB的連接
第七章 結(jié)束語(yǔ)
第八章 主要參考文獻(xiàn)
附錄
--------------摘要--------------
學(xué)生檔案管理系統(tǒng)是典型的信息管理系統(tǒng)(MIS),其開發(fā)主要包括后臺(tái)數(shù)據(jù)庫(kù)的建立和維護(hù)以及前端應(yīng)用程序的開發(fā)兩個(gè)方面。對(duì)于前者要求建立起數(shù)據(jù)一致性和完整性強(qiáng)、數(shù)據(jù)安全性好的庫(kù)。而對(duì)于后者則要求應(yīng)用程序功能完備,易使用等特點(diǎn)。
經(jīng)過(guò)分析,我們使用 MICROSOFT公司的 VISUAL BASIC開發(fā)工具,利用其提供的各種面向?qū)ο蟮拈_發(fā)工具,尤其是數(shù)據(jù)窗口這一能方便而簡(jiǎn)潔操縱數(shù)據(jù)庫(kù)的智能化對(duì)象,首先在短時(shí)間內(nèi)建立系統(tǒng)應(yīng)用原型,然后,對(duì)初始原型系統(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無(wú)效 of system application. The proto無(wú)效 could be modified and developed till users are satisfied with it.
Keywords: ActiveX , Form , Field .
--------------前言--------------
學(xué)生檔案管理系統(tǒng)是一個(gè)教育單位不可缺少的部分,它的內(nèi)容對(duì)于學(xué)校的決策者和管理者來(lái)說(shuō)都至關(guān)重要,所以學(xué)生檔案管理系統(tǒng)應(yīng)該能夠?yàn)橛脩籼峁┏渥愕男畔⒑涂旖莸牟樵兪侄?。但一直以?lái)人們使用傳統(tǒng)人工的方式管理文件檔案,這種管理方式存在著許多缺點(diǎn),如:效率低、保密性差,另外時(shí)間一長(zhǎng),將產(chǎn)生大量的文件和數(shù)據(jù),這對(duì)于查找、更新和維護(hù)都帶來(lái)了不少的困難。
隨著科學(xué)技術(shù)的不斷提高,計(jì)算機(jī)科學(xué)日漸成熟,其強(qiáng)大的功能已為人們深刻認(rèn)識(shí),它已進(jìn)入人類社會(huì)的各個(gè)領(lǐng)域并發(fā)揮著越來(lái)越重要的作用。
作為計(jì)算機(jī)應(yīng)用的一部分,使用計(jì)算機(jī)對(duì)學(xué)生檔案信息進(jìn)行管理,具有著手工管理所無(wú)法比擬的優(yōu)點(diǎn).例如:檢索迅速、查找方便、可靠性高、存儲(chǔ)量大、保密性好、壽命長(zhǎng)、成本低等。這些優(yōu)點(diǎn)能夠極大地提高學(xué)生檔案管理的效率,也是企業(yè)的科學(xué)化、正規(guī)化管理,與世界接軌的重要條件。
因此,開發(fā)這樣一套管理軟件成為很有必要的事情,在下面的各章中我們將以開發(fā)一套學(xué)生檔案管理系統(tǒng)為例,談?wù)勂溟_發(fā)過(guò)程和所涉及到的問(wèn)題及解決方法。
--------------------下面就讓我們開始正文的介紹
第一章
為什么要開發(fā)一個(gè)學(xué)生檔案管理系統(tǒng)?
計(jì)算機(jī)已經(jīng)成為我們學(xué)習(xí)和工作的得力助手:
今天,計(jì)算機(jī)的價(jià)格已經(jīng)十分低廉,性能卻有了長(zhǎng)足的進(jìn)步。它已經(jīng)被應(yīng)用于許多領(lǐng)域,計(jì)算機(jī)之所以如此流行的原因主要有以下幾個(gè)方面:
首先,計(jì)算機(jī)可以代替人工進(jìn)行許多繁雜的勞動(dòng);
其次,計(jì)算機(jī)可以節(jié)省許多資源;
第三,計(jì)算機(jī)可以大大的提高人們的工作效率;
第四,計(jì)算機(jī)可以使敏感文檔更加安全,等等。
在中小學(xué)中用計(jì)算機(jī)管理學(xué)生檔案的意義
現(xiàn)在我國(guó)的中小學(xué)校中檔案的管理水平還停留在紙介質(zhì)的基礎(chǔ)上,這樣的機(jī)制已經(jīng)不能適應(yīng)時(shí)代的發(fā)展,因?yàn)樗速M(fèi)了許多人力和物力,在信息時(shí)代這種傳統(tǒng)的管理方法必然被計(jì)算機(jī)為基礎(chǔ)的信息管理所取代。
我作為一個(gè)計(jì)算機(jī)應(yīng)用的本科生,希望可以在這方面有所貢獻(xiàn)。改革的總設(shè)計(jì)師鄧小平同志說(shuō)過(guò)“科學(xué)技術(shù)是第一生產(chǎn)力”,我希望能用我四年的所學(xué)編制出一個(gè)實(shí)用的程序來(lái)幫助中小學(xué)進(jìn)行更有效的學(xué)籍管理。
歸納起來(lái),好處大約有以下幾點(diǎn):
1. 可以存儲(chǔ)歷屆的學(xué)生檔案,安全、高效;
2. 只需一到二名檔案錄入員即可操作系統(tǒng),節(jié)省大量人力;
3. 可以迅速查到所需信息。
為將來(lái)學(xué)校上網(wǎng)做好準(zhǔn)備
跟據(jù)1999年中國(guó)電信的調(diào)查報(bào)告顯示我國(guó)的上網(wǎng)人數(shù)已達(dá)到890萬(wàn),互聯(lián)網(wǎng)已經(jīng)十分普及,學(xué)校往界的畢業(yè)生希望能在世界的任何一個(gè)角落查到自己校友的信息,本系統(tǒng)為學(xué)校將來(lái)的上網(wǎng)作了先期工作,比如數(shù)據(jù)庫(kù)的建立。
學(xué)生檔案的設(shè)計(jì)分析
根據(jù)實(shí)際情況,我們使用原型法(Rapid Prototyping)即以少量代價(jià)快速地構(gòu)造一個(gè)可執(zhí)行的軟件系統(tǒng)模型。使用戶和開發(fā)人員可以較快地確定需求,然后采用循環(huán)進(jìn)化的開發(fā)方式,對(duì)系統(tǒng)模型作連續(xù)的精化,將系統(tǒng)需具備的性質(zhì)逐漸增加上去,直到所有的性質(zhì)全部滿足。此時(shí)模塊也發(fā)展成為最終產(chǎn)品了。
第二章
怎樣開發(fā)一個(gè)學(xué)生檔案管理系統(tǒng)?
編程環(huán)境的選擇
微軟公司的Visual Basic 6.0是Windows應(yīng)用程序開發(fā)工具,使目前最為廣泛的、易學(xué)易用的面向?qū)ο蟮拈_發(fā)工具。Visual Basic提供了大量的控件,這些控件可用于設(shè)計(jì)界面和實(shí)現(xiàn)各種功能,減少了編程人員的工作量,也簡(jiǎn)化了界面設(shè)計(jì)過(guò)程,從而有效的提高了應(yīng)用程序的運(yùn)行效率和可靠性。故而,實(shí)現(xiàn)本系統(tǒng)VB是一個(gè)相對(duì)較好的選擇。
關(guān)系型數(shù)據(jù)庫(kù)的實(shí)現(xiàn)
Access2000 就是關(guān)系數(shù)據(jù)庫(kù)開發(fā)工具,數(shù)據(jù)庫(kù)能匯集各種信息以供查詢、存儲(chǔ)和檢索。Access 的優(yōu)點(diǎn)在于它能使用數(shù)據(jù)表示圖或自定義窗體收集信息。數(shù)據(jù)表示圖提供了一種類似于 Excel 的電子表格,可以使數(shù)據(jù)庫(kù)一目了然。另外,Access 允許創(chuàng)建自定義報(bào)表用于打印或輸出數(shù)據(jù)庫(kù)中的信息。Access也提供了數(shù)據(jù)存儲(chǔ)庫(kù),可以使用桌面數(shù)據(jù)庫(kù)文件把數(shù)據(jù)庫(kù)文件置于網(wǎng)絡(luò)文件服務(wù)器,與其他網(wǎng)絡(luò)用戶共享數(shù)據(jù)庫(kù)。Access 是一種關(guān)系數(shù)據(jù)庫(kù)工具,關(guān)系數(shù)據(jù)庫(kù)是已開發(fā)的最通用的數(shù)據(jù)庫(kù)之一。如上所述,Access 作為關(guān)系數(shù)據(jù)庫(kù)開發(fā)具備了許多優(yōu)點(diǎn),可以在一個(gè)數(shù)據(jù)包中同時(shí)擁有桌面數(shù)據(jù)庫(kù)的便利和關(guān)系數(shù)據(jù)庫(kù)的強(qiáng)大功能。
二者的結(jié)合(DBA)
微軟的JET數(shù)據(jù)庫(kù)引擎提供了與數(shù)據(jù)庫(kù)打交道的途徑,我們是通過(guò)它以及Visual Basic 來(lái)訪問(wèn)數(shù)據(jù)庫(kù)并對(duì)其進(jìn)行各種操作。Visual Basic、Access以及其他微軟的軟件產(chǎn)品都是通過(guò)共用JET數(shù)據(jù)庫(kù)引擎,從而給用戶提供了豐富的數(shù)據(jù)類型。
DATA 控件在數(shù)據(jù)庫(kù)中的信息與將信息顯示給用戶看的Visual Basic程序之間架起了一座橋梁。我們可以設(shè)置DATA控件的各個(gè)屬性,告訴它要調(diào)用那個(gè)數(shù)據(jù)庫(kù)的哪個(gè)部分。缺省情況下,DATA控件根據(jù)數(shù)據(jù)庫(kù)中的一個(gè)或多個(gè)數(shù)據(jù)表建立一個(gè)dynaset-無(wú)效(動(dòng)態(tài)集合)類型的記錄集合。一個(gè)記錄集合是動(dòng)態(tài)的也就意味著,當(dāng)原來(lái)的數(shù)據(jù)表中的容改變了以后,該記錄集合中的記錄也會(huì)隨之改變。DATA控件還提供了用來(lái)瀏覽不同記錄的各種跳轉(zhuǎn)按鈕。將DATA控件放置在窗體中之后,我們還必須在該控件與要處理的數(shù)據(jù)庫(kù)之間建立聯(lián)系。
第三章
Windows下的Visual?????????????
?????????????????????????????
?????????????????
?????????????????????????????????????????????????)。 Visual Basic應(yīng)用程序基本的構(gòu)建塊是用戶所創(chuàng)建的對(duì)象,每一個(gè)對(duì)象都具有一些特性和行為(屬性、事件和 方法)。開發(fā)人員可以最有效利用所創(chuàng)建的每一個(gè)對(duì)象。使用應(yīng)用程序具有可通用性可說(shuō)擴(kuò)展性和強(qiáng)有力的功能。
Visual Basic應(yīng)用由一系列對(duì)象組成,包括有函數(shù)、菜單、函數(shù)、結(jié)構(gòu)和數(shù)據(jù)窗口、用戶對(duì)象、用戶事件等等,對(duì)象中又包含若干控件如命令按鈕、單行編輯器等這些對(duì)象和控件都可在許多應(yīng)用中重復(fù)使用。
實(shí)現(xiàn)菜單選項(xiàng)
菜單是程序最重要的特性之一,大多數(shù)程序都依賴一個(gè)定義良好的菜單使程序易于使用和維護(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就是一個(gè)可以在窗體上浮動(dòng)的工具,同時(shí)也是其他ActiveX的容器。通過(guò)在CoolBar中遷入其他空間你局可以向用戶提供更好的靈活性和義用性。
Toolbar 是工具條控件,是實(shí)現(xiàn)工具條的主體。其中的按鈕可以顯示圖像和標(biāo)題,并按功能分組或加入分隔符,還可以圍棋設(shè)置鼠標(biāo)停留在其上顯示的提示字符。Toolbar也是一個(gè)控件容器且具有Style屬性,并可以為其增加下拉按鈕和平滑按鈕等。
選擇“工程”下拉菜單中的“部件”選項(xiàng),顯示“部件”對(duì)話框。在“控件”選項(xiàng)卡列表中選擇“Microsoft Windows Common Controls 6.0”后工具相中增加改控件。其屬性及對(duì)象如下:
1. Align屬性定義工具條在窗體中的位置
2. ToolTipText屬性是字符串類型,定義控件的提示字符
3. Style屬性定義按鈕外觀。
4. ImageList屬性定義與數(shù)據(jù)條對(duì)應(yīng)的ImageList控件名,該控件定義工具條按鈕顯示的圖像。
5. HotImangeList屬性設(shè)置一個(gè)ImageList控件名,該控件定義按鈕獲得熱點(diǎn)時(shí)顯示的圖像。
6. DisabledImageList屬性定義工具條按鈕無(wú)效時(shí)顯示的圖像。
創(chuàng)建工具條包括ImageList和Toolbar控件
ImageList用于為其他控件提供圖像庫(kù),將ImageList控件加入到工具箱的操作于前述Toolbar控件相同。
幫助
專業(yè)水平的軟件通常都帶有聯(lián)機(jī)幫助功能。無(wú)論寫出來(lái)的程序是要給大量的用戶使用,還是僅僅局限于公司內(nèi)部有限的使用者,我們都應(yīng)該為用戶提供詳細(xì)的、易于理解的聯(lián)機(jī)幫助文檔。微軟的Help Workshop4.0 是一套獨(dú)立于Visual Basic 的用來(lái)協(xié)助我們創(chuàng)建、運(yùn)行于32位Windows 操作系統(tǒng)下的幫助文件的工具。使用它我們可以為我們編寫的應(yīng)用程序生成一組幫助文件。
關(guān)于版本
為了是程序顯得更具有專業(yè)風(fēng)格,首先可以在其中加入通常的應(yīng)用程序信息。這些信息包括公司名稱、版本號(hào)、修訂號(hào)以及其他類似信息。Visual Basic允許你使用APP對(duì)象來(lái)保存這些信息,APP對(duì)象是一個(gè)預(yù)定義對(duì)象,不需要在程序中創(chuàng)建它。APP對(duì)象的大多數(shù)屬性被應(yīng)用程序用來(lái)提供常規(guī)的信息,通過(guò)使用這些APP提供的屬性,可以在應(yīng)用程序和用戶之間交流重要信息,在項(xiàng)目屬性框中可以設(shè)置它的屬性。
第四章
使用Access2000 實(shí)現(xiàn)關(guān)系型數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)的概念
數(shù)據(jù)庫(kù)是一種存儲(chǔ)數(shù)據(jù)并對(duì)數(shù)據(jù)進(jìn)行操作的工具。數(shù)據(jù)庫(kù)的作用在于組織和表達(dá)信息,簡(jiǎn)而言之,數(shù)據(jù)庫(kù)就是信息的集合。計(jì)算機(jī)的數(shù)據(jù)庫(kù)可以分為兩類:非關(guān)系數(shù)據(jù)庫(kù)(flat-file)和關(guān)系數(shù)據(jù)庫(kù)(relational)。關(guān)系數(shù)據(jù)庫(kù)中包含了多個(gè)數(shù)據(jù)表的信息,數(shù)據(jù)庫(kù)含有各個(gè)不同部分的術(shù)語(yǔ),象記錄、域等。
新建一個(gè)數(shù)據(jù)庫(kù)
創(chuàng)建任何一個(gè)數(shù)據(jù)庫(kù)的第一步是仔細(xì)的規(guī)劃數(shù)據(jù)庫(kù),設(shè)計(jì)必須是靈活的、有邏輯的。創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)的過(guò)程被認(rèn)為是數(shù)據(jù)模型設(shè)計(jì)。
1. 標(biāo)識(shí)需要的數(shù)據(jù);
2. 收集被標(biāo)識(shí)的字段到表中;
3. 標(biāo)識(shí)主關(guān)鍵字字段;
4. 繪制一個(gè)簡(jiǎn)單的數(shù)據(jù)圖表;
5. 規(guī)范數(shù)據(jù);
6. 標(biāo)識(shí)指定字段的信息;
7. 創(chuàng)建物理表。
修改已建的數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)的修改分為:添加、編輯和刪除記錄。這三種操作均可由Visual Basic 創(chuàng)建的程序來(lái)完成,下面的章節(jié)將詳細(xì)描述實(shí)現(xiàn)的具體方法。
實(shí)現(xiàn)數(shù)據(jù)庫(kù)之間的聯(lián)系
數(shù)據(jù)庫(kù)之間的關(guān)系指明兩個(gè)庫(kù)之間共享一個(gè)共同的關(guān)鍵字值。一個(gè)連接是指一種虛擬的表,這種表是在當(dāng)用戶要求從相互關(guān)聯(lián)的各個(gè)不同的表中獲取信息時(shí)建立的,關(guān)鍵字段用于在相互連接的不同表中查找匹配的記錄。一個(gè)更高級(jí)的連接形式稱為自連接。這種連接是指一個(gè)表被連接到它自己的一個(gè)字段,或在不同的紀(jì)錄中由重復(fù)數(shù)據(jù)的組合字段。數(shù)據(jù)庫(kù)中有三種不同類型的關(guān)鍵字:主關(guān)鍵字、組合關(guān)鍵字和外關(guān)鍵字。在表中使用的關(guān)鍵字類型用于描述庫(kù)表示什么以及在數(shù)據(jù)庫(kù)中如何與其它的庫(kù)建立關(guān)系。
第五章
系統(tǒng)總體規(guī)劃
系統(tǒng)功能
1. 可以進(jìn)行文本操作;
2. 添加一個(gè)數(shù)據(jù)庫(kù)項(xiàng)目;
3. 刪除一個(gè)數(shù)據(jù)庫(kù)項(xiàng)目;
4. 修改一個(gè)數(shù)據(jù)庫(kù)項(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)分別由文件、視圖及幫助三個(gè)選項(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)頁(yè)分別由瀏覽記錄、查找等三個(gè)選項(xiàng)組成。
2.1瀏覽記錄:
學(xué)生學(xué)籍庫(kù)
課程庫(kù)
成績(jī)庫(kù)
2.2查找記錄
2.3備注
3.系統(tǒng)信息
打開系統(tǒng)信息進(jìn)入選項(xiàng)頁(yè)分別由系統(tǒng)信息、信息采集等組成。
6.1.3 幫助系統(tǒng)
具體實(shí)現(xiàn)見6.1.3
圖6.1.3
數(shù)據(jù)庫(kù)的實(shí)現(xiàn)
6.2.1學(xué)籍?dāng)?shù)據(jù)庫(kù)
學(xué)籍?dāng)?shù)據(jù)庫(kù)里存儲(chǔ)了學(xué)生的檔案包括:學(xué)號(hào)、姓名、年齡等 表如6.2.6
列名(中文)列名(英文)數(shù)據(jù)類型寬度小數(shù)點(diǎn)位數(shù)是否為空姓名Name Date8No學(xué)號(hào)CodeInteger6No性別SexDate2No年齡AgeDate6No民族NationDate6No政治面貌Visage...Date2...Yes...家庭住址AddressDate10No備注RecordDate15No 表6.2.6
學(xué)籍模塊:
該模塊主要完成學(xué)生基本信息的錄入、刪除 、更新等功能。在此模塊中定義了八個(gè)域名來(lái)進(jìn)行學(xué)生的信息存儲(chǔ)。如果用戶修改某一紀(jì)錄中的某一項(xiàng),可單添加按鈕進(jìn)行學(xué)生記錄的編輯,此窗口使用數(shù)據(jù)窗口的FREEDOM風(fēng)格(典型的錄入界面)。該種風(fēng)格特點(diǎn)是列標(biāo)題緊挨著數(shù)據(jù)列在此窗口還可以增加新學(xué)生紀(jì)錄。
6.2.2成績(jī)數(shù)據(jù)庫(kù)
成績(jī)數(shù)據(jù)庫(kù)里存儲(chǔ)了學(xué)生的成績(jī)包括:學(xué)號(hào)、成績(jī)、等如表6.2.7
列名(中文)列名(英文)數(shù)據(jù)類型寬度小數(shù)點(diǎn)位數(shù)是否為空姓名Name Date8No學(xué)號(hào)CodeInteger6No成績(jī)ScoreDate10No備注RecordDate15No 表6.2.7
成績(jī)模塊:
該模塊主要完成學(xué)生成績(jī)的基本信息的錄入、刪除 、更新等功能。在此模塊中定義了四個(gè)域名來(lái)進(jìn)行學(xué)生的信息存儲(chǔ)。
6.2.3課程數(shù)據(jù)庫(kù)
課程數(shù)據(jù)庫(kù)利存儲(chǔ)了課程的信息:課程名、作者、出版社等如表6.2.8
列名(中文)列名(英文)數(shù)據(jù)類型寬度小數(shù)點(diǎn)位數(shù)是否為空課程IDCourseDate8No課程名NameDate15No出版社PublisherDate20No作者ScoreDate18No備注RecordDate15No 表6.2.8
課程模塊:
該模塊主要完成存儲(chǔ)課程的所有信息及錄入、刪除 、更新等功能
與VB的連接
Visual Basic提供了與底層數(shù)據(jù)庫(kù)系統(tǒng)緊密的連接。Visual Basic 支持不同的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)并充分發(fā)揮每一個(gè)數(shù)據(jù)庫(kù)的特長(zhǎng)。生成獨(dú)立應(yīng)用或脫離服務(wù)器運(yùn)行的服務(wù)以上的應(yīng)用,Visual Basic連接數(shù)據(jù)庫(kù)的方式有兩種:
·通過(guò)使用Visual Basic的 DATA控件。
·通過(guò)使用由Visual Basic提供的專用的直接與數(shù)據(jù)庫(kù)相連的接口
第七章
結(jié)束語(yǔ)
經(jīng)過(guò)三個(gè)多月的設(shè)計(jì)和開發(fā),中小學(xué)檔案管理系統(tǒng)基本開發(fā)完畢。其功能基本符合用戶需求,能夠完成學(xué)生學(xué)籍的存儲(chǔ)和成績(jī)的查詢以及各類相關(guān)報(bào)表的打印。并提供部分系統(tǒng)維護(hù)功能,使用戶方便進(jìn)行數(shù)據(jù)備份和恢復(fù)、數(shù)據(jù)刪除。,對(duì)于數(shù)據(jù)的一致性的問(wèn)題也通過(guò)程序進(jìn)行了有效的解決。
但是由于畢業(yè)設(shè)計(jì)時(shí)間較短,所以該系統(tǒng)還有許多不盡如人意的地方,比如聯(lián)機(jī)文檔比較少,用戶界面不夠美觀,出錯(cuò)處理不夠等多方面問(wèn)題。這些都有待進(jìn)一步改善。
致謝
在本次畢業(yè)設(shè)計(jì)中,我從指導(dǎo)老師雷震甲老師身上學(xué)到了很多東西。雷老師認(rèn)真負(fù)責(zé)的工作態(tài)度,嚴(yán)謹(jǐn)?shù)闹螌W(xué)精神和深厚的理論水平都使我收益匪淺。他無(wú)論在理論上還是在實(shí)踐中,都給與我很大的幫助,使我得到不少的提高這對(duì)于我以后的工作和學(xué)習(xí)都有一種巨大的幫助,感謝他耐心的輔導(dǎo)。
另外,在系統(tǒng)開發(fā)過(guò)程中雷老師的助手張彥明老師也給于我很大的幫助,幫助解決了不少的難點(diǎn),使得系統(tǒng)能及時(shí)開發(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é)時(shí)教程
作者: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() '獲得可用文件號(hào)
Open FileName For Output As FileNum '打開輸出文件
'如果無(wú)指定文件,則創(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語(yǔ)言程序設(shè)計(jì):班級(jí)電話本管理程序
/* 電話簿程序 */
/******頭文件(.h)***********/
#include "stdio.h" /*I/O函數(shù)*/
#include "stdlib.h" /*標(biāo)準(zhǔn)庫(kù)函數(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[]); /*按序號(hào)查找顯示記錄*/
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; /*保存記錄長(zhǎng)度*/
clrscr(); /*清屏*/
for(;;)/*無(wú)限循環(huán)*/
{
switch(menu_select()) /*調(diào)用主菜單函數(shù),返回值整數(shù)作開關(guān)語(yǔ)句的條件*/
{
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; /*按序號(hào)顯示記錄*/
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ù)值返回類型為整型表示記錄長(zhǎng)度*/
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)的序號(hào)*/
clrscr(); /*清屏*/
printf("please search name\n");
scanf("%s",s); /*輸入待查找姓名*/
i=find(t,n,s); /*調(diào)用find函數(shù),得到一個(gè)整數(shù)*/
if(in-1) /*如果整數(shù)i值大于n-1,說(shuō)明沒找到*/
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)號(hào),程序提前結(jié)結(jié)束*/
}
return i; /*返回i值*/
}
/*刪除函數(shù),參數(shù)為記錄數(shù)組和記錄條數(shù)*/
int delete(ADDRESS t[],int n)
{
char s[20]; /*要?jiǎng)h除記錄的姓名*/
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超過(guò)了數(shù)組的長(zhǎng)度*/
printf("no found not deleted\n"); /*顯示沒找到要?jiǎng)h除的記錄*/
else
{
print(t[i]); /*調(diào)用輸出函數(shù)顯示該條記錄信息*/
printf("Are you sure delete it(1/0)\n"); /*確認(rèn)是否要?jiǎng)h除*/
scanf("%d",ch); /*輸入一個(gè)整數(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]; /*確定插入在哪個(gè)記錄之前*/
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--) /*從最后一個(gè)結(jié)點(diǎn)開始向后移動(dòng)一條*/
{
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個(gè)位置*/
strcpy(t[i].units,temp.units); /*將新插入記錄的單位拷貝到第i個(gè)位置*/
strcpy(t[i].tele,temp.tele); /*將新插入記錄的電話拷貝到第i個(gè)位置*/
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"); /*將換行符號(hào)寫入文件*/
for(i=0;in;i++)
{
fprintf(fp,"%-20s%-30s%-10s",t[i].name,t[i].units,t[i].tele);/*格式寫入記錄*/
fprintf(fp,"\r\n"); /*將換行符號(hào)寫入文件*/
}
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ù)*/
}
/*按序號(hào)顯示記錄函數(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); /*輸入序號(hào)*/
fscanf(fp,"%d",n); /*從文件讀入記錄數(shù)*/
if(id=0idn) /*判斷序號(hào)是否在記錄范圍內(nèi)*/
{
fseek(fp,(id-1)*sizeof(ADDRESS),1); /*移動(dòng)文件指針到該記錄位置*/
print(t[id]); /*調(diào)用輸出函數(shù)顯示該記錄*/
printf("\r\n");
}
else
printf("no %d number record!!!\n ",id); /*如果序號(hào)不合理顯示信息*/
fclose(fp); /*關(guān)閉文件*/
}
/*排序函數(shù),參數(shù)為結(jié)構(gòu)體數(shù)組和記錄數(shù)*/
void sort(ADDRESS t[],int n)
{
int i,j,flag;
ADDRESS temp; /*臨時(shí)變量做交換數(shù)據(jù)用*/
for(i=0;in;i++)
{
flag=0; /*設(shè)標(biāo)志判斷是否發(fā)生過(guò)交換*/
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,說(shuō)明沒有發(fā)生過(guò)交換循環(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)左邊界=右邊界時(shí)*/
{
m=(l+r)/2; /*計(jì)算中間位置*/
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) /*如果左邊界大于右邊界時(shí)*/
printf("not found\n"); /*顯示沒找到*/
}
/*復(fù)制文件*/
void copy()
{
char outfile[20]; /*目標(biāo)文件名*/
int i,n;
ADDRESS temp[M]; /*定義臨時(shí)變量*/
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)于班級(jí)管理的流程圖
(1)任命班長(zhǎng)
(2)授予班長(zhǎng)挑選副班長(zhǎng)以及其他班委員的權(quán)力,
(3)授予班委任命、管理小組長(zhǎng)的權(quán)力
(4)授予小組長(zhǎng)管理組員的權(quán)力
結(jié)束!
軟件開發(fā)流程圖示例關(guān)于班級(jí)管理的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于軟件開發(fā)如何管理、軟件開發(fā)流程圖示例關(guān)于班級(jí)管理的信息別忘了在本站進(jìn)行查找喔。