軟件開發(fā)流程圖示例關(guān)于班級(jí)管理(班級(jí)管理系統(tǒng)用例圖)
本篇文章給大家談?wù)勡浖_發(fā)流程圖示例關(guān)于班級(jí)管理,以及班級(jí)管理系統(tǒng)用例圖對(duì)應(yīng)的知識(shí)點(diǎn),希望對(duì)各位有所幫助,不要忘了收藏本站喔。
本文目錄一覽:
- 1、C語(yǔ)言程序設(shè)計(jì):班級(jí)電話本管理程序
- 2、C語(yǔ)言程序設(shè)計(jì) 班級(jí)學(xué)生成績(jī)管理系統(tǒng)
- 3、軟件開發(fā)流程
- 4、想開發(fā)一個(gè)app,APP軟件開發(fā)的流程有哪些
- 5、軟件開發(fā)的流程都有哪些步驟呢
- 6、要寫一份畢業(yè)論文“學(xué)生成績(jī)管理系統(tǒng)”,它主要流程有哪些?怎么入手
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,說明沒找到*/
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超過了數(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ā)生過交換*/
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)左邊界=右邊界時(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ù)制成功*/
}
C語(yǔ)言程序設(shè)計(jì) 班級(jí)學(xué)生成績(jī)管理系統(tǒng)
設(shè)計(jì)課題一:班級(jí)成績(jī)管理系統(tǒng)
一、 問題描述:
對(duì)一個(gè)有N個(gè)學(xué)生的班級(jí),每個(gè)學(xué)生有M門課程。該系統(tǒng)實(shí)現(xiàn)對(duì)班級(jí)成績(jī)的錄入、顯示、修改、排序、保存等操作的管理。
二、功能要求:
1、本系統(tǒng)采用一個(gè)結(jié)構(gòu)體數(shù)組,每個(gè)數(shù)據(jù)的結(jié)構(gòu)應(yīng)當(dāng)包括:學(xué)號(hào)、姓名、M門課程名稱。
2、本系統(tǒng)顯示這樣的菜單:
請(qǐng)選擇系統(tǒng)功能項(xiàng):
a、 成績(jī)錄入
b、 成績(jī)顯示
c、 成績(jī)保存
d、 成績(jī)排序
e、 成績(jī)修改(要求先輸入密碼)
f、 成績(jī)統(tǒng)計(jì)
(1) 顯示每門課程成績(jī)最高的學(xué)生的基本信息
(2) 顯示每門課程的平均成績(jī)
(3) 顯示超過某門課程平均成績(jī)的學(xué)生人數(shù)
g、 退出系統(tǒng)
3、執(zhí)行一個(gè)具體的功能之后,程序?qū)⒅匦嘛@示菜單。
4、將學(xué)生成績(jī)保存到文件中。
三、算法提示:
1、數(shù)據(jù)結(jié)構(gòu):結(jié)構(gòu)體類型數(shù)組。
2、數(shù)據(jù)庫(kù)結(jié)構(gòu):下表構(gòu)成該系統(tǒng)的基本數(shù)據(jù)庫(kù)。
姓名 學(xué)號(hào) 課程名稱1 課程名稱2 ●●●●●●
char Char float float
四、測(cè)試數(shù)據(jù):
學(xué)生人數(shù)N=10
課程門數(shù)M=4
課程名:數(shù)學(xué)、語(yǔ)文、英語(yǔ)、政治
五、其它
對(duì)該系統(tǒng)有興趣的同學(xué)可以在實(shí)現(xiàn)上述基本功能后,完善系統(tǒng)的其它功能。
問題補(bǔ)充:
今天誰(shuí)能給我答案?。。。。。。。〖奔保。。。。。?!
提問者: 342123465 - 一級(jí)
最佳答案
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)行管理。來實(shí)現(xiàn)對(duì)整個(gè)系統(tǒng)的操作。
根據(jù)課題的要求。每一個(gè)學(xué)生的包括姓名(char)、學(xué)號(hào)(char)、M門課程的成績(jī)(float).再加上系統(tǒng)功能上的要求每一學(xué)生的信息還要總分和名次等。所以自然的想到要用結(jié)構(gòu)體來定義每一個(gè)學(xué)生的信息結(jié)構(gòu)。然后用鏈表把它們組成一個(gè)有序的整體。用對(duì)鏈表的操作來實(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 顯示超過某門課程平均成績(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ì)說明分別如下:
主函數(shù) main()
利用無(wú)限次循環(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()
這是一個(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ù),用來執(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é)過都要靠自己到課外的資料中去查找。在用的時(shí)候難免出現(xiàn)這樣那樣的錯(cuò)誤。如開始設(shè)計(jì)出來的菜單不是預(yù)想的那樣,而是總個(gè)窗中出現(xiàn)混亂。解決的這個(gè)問題的辦法是調(diào)整。最后還是老師幫我?guī)臀覀冋业搅藛栴}的所在——for 循環(huán)的次超過了鏈表中結(jié)點(diǎn)的數(shù)量。再就是自定義函數(shù)時(shí)由于課本的概念不清楚,多寫了空格鍵,以至函數(shù)調(diào)用不出來。又如:在設(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)行過程中不能控制。所以你就會(huì)認(rèn)為是死機(jī)。如果沒有鏈表尾的判斷。就會(huì)在運(yùn)行過程出現(xiàn)想不到的錯(cuò)誤。如:在顯示鏈表信息時(shí),后面就會(huì)出現(xiàn)亂碼。
一個(gè)系統(tǒng)的菜單和提示信息非常重要。如果沒有這些用戶根本不知道怎么用你設(shè)計(jì)的這個(gè)系統(tǒng)。在設(shè)計(jì)的調(diào)試過程中也無(wú)法順利的完成調(diào)試工作。有了一個(gè)清晰簡(jiǎn)單的菜單和一些提示信息這后,調(diào)試過程完成的非常順利。
予我耐心解答的老師和同學(xué),是他們?yōu)槲倚〕绦虻某晒ζ鸬搅岁P(guān)鍵性的作用,那么多個(gè)日夜,如此多的困難,同學(xué)們勤懇塌實(shí),從開始到結(jié)束,沒有顯出一點(diǎn)倦意,始終熱情高漲,我感謝這種氛圍,感謝學(xué)校提供的良好條件。
回顧起此次課程設(shè)計(jì),至今我仍感慨頗多,的確,從拿到題目到完成整個(gè)編程,從理論到實(shí)踐,在整整半個(gè)學(xué)期的日子里,可以學(xué)到很多很多的東西,同時(shí)不僅可以鞏固了以前所學(xué)過的知識(shí),而且學(xué)到了很多在書本上所沒有學(xué)到過的知識(shí)。通過這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會(huì)遇到過各種各樣的問題,同時(shí)在設(shè)計(jì)的過程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過的知識(shí)理解得不夠深刻,掌握得不夠牢固,比如說結(jié)構(gòu)體……通過這次課程設(shè)計(jì)之后,一定把以前所學(xué)過的知識(shí)重新溫故。
本次課程設(shè)計(jì)結(jié)束了,對(duì)于我的影響很大。我通過這次實(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、把分解出來的子任務(wù),做給一個(gè)相對(duì)獨(dú)立的模塊。
3、在設(shè)計(jì)一個(gè)模塊之前,要簡(jiǎn)單構(gòu)想一下總界面的顯視情況。
4、針對(duì)構(gòu)想出來的界面進(jìn)行程序的編寫。
最后,感謝老師您對(duì)我的指導(dǎo)和從百忙中抽空看我的設(shè)計(jì),謝謝!
附件:
源程序:
#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" /*動(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); /*如菜單返回值為12程序結(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),超過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為空,說明鏈表中沒有該結(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; /*返回頭指針
}
軟件開發(fā)流程
一個(gè)軟件從開始到最后一共需要以下幾個(gè)流程:
1、計(jì)劃
2、分析
3、設(shè)計(jì)
4、編碼
5、測(cè)試
6、維護(hù)
1、計(jì)劃
對(duì)所要解決的問題進(jìn)行總體定義,包括了解用戶的要求及現(xiàn)實(shí)環(huán)境,從技術(shù)、經(jīng)濟(jì)和社會(huì)因素等3個(gè)方面研究并論證本軟件項(xiàng)目的可行性,編寫可行性研究報(bào)告,探討解決問題的方案,并對(duì)可供使用的資源(如計(jì)算機(jī)硬件、系統(tǒng)軟件、人力等)成本,可取得的效益和開發(fā)進(jìn)度作出估計(jì),制訂完成開發(fā)任務(wù)的實(shí)施計(jì)劃。
2、分析
軟件需求分析就是對(duì)開發(fā)什么樣的軟件的一個(gè)系統(tǒng)的分析與設(shè)想。它是一個(gè)對(duì)用戶的需求進(jìn)行去粗取精、去偽存真、正確理解,然后把它用軟件工程開發(fā)語(yǔ)言(形式功能規(guī)約,即需求規(guī)格說明書)表達(dá)出來的過程。本階段的基本任務(wù)是和用戶一起確定要解決的問題,建立軟件的邏輯模型,編寫需求規(guī)格說明書文檔并最終得到用戶的認(rèn)可。需求分析的主要方法有結(jié)構(gòu)化分析方法、數(shù)據(jù)流程圖和數(shù)據(jù)字典等方法。本階段的工作是根據(jù)需求說明書的要求,設(shè)計(jì)建立相應(yīng)的軟件系統(tǒng)的體系結(jié)構(gòu),并將整個(gè)系統(tǒng)分解成若干個(gè)子系統(tǒng)或模塊,定義子系統(tǒng)或模塊間的接口關(guān)系,對(duì)各子系統(tǒng)進(jìn)行具體設(shè)計(jì)定義,編寫軟件概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)說明書,數(shù)據(jù)庫(kù)或數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)說明書,組裝測(cè)試計(jì)劃。在任何軟件或系統(tǒng)開發(fā)的初始階段必須先完全掌握用戶需求,以期能將緊隨的系統(tǒng)開發(fā)過程中哪些功能應(yīng)該落實(shí)、采取何種規(guī)格以及設(shè)定哪些限制優(yōu)先加以定位。系統(tǒng)工程師最終將據(jù)此完成設(shè)計(jì)方案,在此基礎(chǔ)上對(duì)隨后的程序開發(fā)、系統(tǒng)功能和性能的描述及限制作出定義。
3、設(shè)計(jì)
軟件設(shè)計(jì)可以分為概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)兩個(gè)階段。實(shí)際上軟件設(shè)計(jì)的主要任務(wù)就是將軟件分解成模塊是指能實(shí)現(xiàn)某個(gè)功能的數(shù)據(jù)和程序說明、可執(zhí)行程序的程序單元??梢允且粋€(gè)函數(shù)、過程、子程序、一段帶有程序說明的獨(dú)立的程序和數(shù)據(jù),也可以是可組合、可分解和可更換的功能單元。模塊,然后進(jìn)行模塊設(shè)計(jì)。概要設(shè)計(jì)就是結(jié)構(gòu)設(shè)計(jì),其主要目標(biāo)就是給出軟件的模塊結(jié)構(gòu),用軟件結(jié)構(gòu)圖表示。詳細(xì)設(shè)計(jì)的首要任務(wù)就是設(shè)計(jì)模塊的程序流程、算法和數(shù)據(jù)結(jié)構(gòu),次要任務(wù)就是設(shè)計(jì)數(shù)據(jù)庫(kù),常用方法還是結(jié)構(gòu)化程序設(shè)計(jì)方法。
4、編碼
軟件編碼是指把軟件設(shè)計(jì)轉(zhuǎn)換成計(jì)算機(jī)可以接受的程序,即寫成以某一程序設(shè)計(jì)語(yǔ)言表示的“源程序清單”。充分了解軟件開發(fā)語(yǔ)言、工具的特性和編程風(fēng)格,有助于開發(fā)工具的選擇以及保證軟件產(chǎn)品的開發(fā)質(zhì)量。
當(dāng)前軟件開發(fā)中除在專用場(chǎng)合,已經(jīng)很少使用二十世紀(jì)80年代的高級(jí)語(yǔ)言了,取而代之的是面向?qū)ο蟮拈_發(fā)語(yǔ)言。而且面向?qū)ο蟮拈_發(fā)語(yǔ)言和開發(fā)環(huán)境大都合為一體,大大提高了開發(fā)的速度。
5、測(cè)試
軟件測(cè)試的目的是以較小的代價(jià)發(fā)現(xiàn)盡可能多的錯(cuò)誤。要實(shí)現(xiàn)這個(gè)目標(biāo)的關(guān)鍵在于設(shè)計(jì)一套出色的測(cè)試用例(測(cè)試數(shù)據(jù)與功能和預(yù)期的輸出結(jié)果組成了測(cè)試用例)。如何才能設(shè)計(jì)出一套出色的測(cè)試用例,關(guān)鍵在于理解測(cè)試方法。不同的測(cè)試方法有不同的測(cè)試用例設(shè)計(jì)方法。兩種常用的測(cè)試方法是白盒法測(cè)試對(duì)象是源程序,依據(jù)的是程序內(nèi)部的的邏輯結(jié)構(gòu)來發(fā)現(xiàn)軟件的編程錯(cuò)誤、結(jié)構(gòu)錯(cuò)誤和數(shù)據(jù)錯(cuò)誤。結(jié)構(gòu)錯(cuò)誤包括邏輯、數(shù)據(jù)流、初始化等錯(cuò)誤。用例設(shè)計(jì)的關(guān)鍵是以較少的用例覆蓋盡可能多的內(nèi)部程序邏輯結(jié)果。白盒法和黑盒法依據(jù)的是軟件的功能或軟件行為描述,發(fā)現(xiàn)軟件的接口、功能和結(jié)構(gòu)錯(cuò)誤。其中接口錯(cuò)誤包括內(nèi)部/外部接口、資源管理、集成化以及系統(tǒng)錯(cuò)誤。黑盒法用例設(shè)計(jì)的關(guān)鍵同樣也是以較少的用例覆蓋模塊輸出和輸入接口。
6、維護(hù)
維護(hù)是指在已完成對(duì)軟件的研制(分析、設(shè)計(jì)、編碼和測(cè)試)工作并交付使用以后,對(duì)軟件產(chǎn)品所進(jìn)行的一些軟件工程的活動(dòng)。即根據(jù)軟件運(yùn)行的情況,對(duì)軟件進(jìn)行適當(dāng)修改,以適應(yīng)新的要求,以及糾正運(yùn)行中發(fā)現(xiàn)的錯(cuò)誤。編寫軟件問題報(bào)告、軟件修改報(bào)告。
一個(gè)中等規(guī)模的軟件,如果研制階段需要一年至二年的時(shí)間,在它投入使用以后,其運(yùn)行或工作時(shí)間可能持續(xù)五年至十年。那么它的維護(hù)階段也是運(yùn)行的這五年至十年期間。在這段時(shí)間,人們幾乎需要著手解決研制階段所遇到的各種問題,同時(shí)還要解決某些維護(hù)工作本身特有的問題。做好軟件維護(hù)工作,不僅能排除障礙,使軟件能正常工作,而且還可以使它擴(kuò)展功能,提高性能,為用戶帶來明顯的經(jīng)濟(jì)效益。然而遺憾的是,對(duì)軟件維護(hù)工作的重視往往遠(yuǎn)不如對(duì)軟件研制工作的重視。而事實(shí)上,和軟件研制工作相比,軟件維護(hù)的工作量和成本都要大得多。
在實(shí)際開發(fā)過程中,軟件開發(fā)并不是從第一步進(jìn)行到最后一步,而是在任何階段,在進(jìn)入下一階段前一般都有一步或幾步的回溯。在測(cè)試過程中的問題可能要求修改設(shè)計(jì),用戶可能會(huì)提出一些需要來修改需求說明書等。
想開發(fā)一個(gè)app,APP軟件開發(fā)的流程有哪些
開發(fā)一個(gè)app,APP軟件開發(fā)的流程有哪些
開發(fā)一個(gè)手機(jī)APP都有哪些步驟?說一下制作流程
不同時(shí)期有不同時(shí)期的企業(yè)標(biāo)識(shí),APP的開發(fā)作為現(xiàn)代企業(yè)身份的象征,不斷的被接受,很多企業(yè)或者個(gè)人想要尋求一個(gè)新的高度,都選擇了APP開發(fā)。那究竟一款普通的APP開發(fā)制作流程有哪些呢?給大家簡(jiǎn)單的介紹一下,APP開發(fā)的制作流程。
一、明確APP功能需求
想要開發(fā)一款A(yù)PP,就要想到在APP里面的功能都有哪些,明確自己開發(fā)APP的用途是在哪里,把自己變成一個(gè)APP的使用者,換位思考如果自己是一個(gè)使用者會(huì)需要哪些功能。
二、APP功能思維導(dǎo)圖展示
小編在這里講一下,app的功能思維導(dǎo)圖展示不是每一個(gè)公司在明確功能需求后都會(huì)給你做的,很多公司為了節(jié)約時(shí)間,不浪費(fèi)成本,只有你簽完合同了以后她們才會(huì)做出一份功能展示,APP開發(fā)的行業(yè)人來說,我覺得這種公司不太真誠(chéng),具體的我這里暫且不談。
三、APP產(chǎn)品報(bào)價(jià)
上一步APP思維導(dǎo)圖功能展示環(huán)節(jié),你可以隨意的增添刪改,把一些合理的,不合理的該增加的增加,該刪掉的刪掉,一直改到自己滿意為止,而最終確定功能后,公司產(chǎn)品經(jīng)理會(huì)根據(jù)核算開發(fā)周期,人員投入等給你一個(gè)合適的報(bào)價(jià),當(dāng)然很多公司的價(jià)格出入較大,你可以講價(jià)。如果覺得合適可以簽合同,那就簽合同交定金,注意,一定要仔細(xì)看一下合同內(nèi)容。
四、確定APP的UI設(shè)計(jì)
UI設(shè)計(jì)是APP正式開發(fā)的第一步,而UI設(shè)計(jì)也就是APP開發(fā)出之后一個(gè)小縮影,所以當(dāng)開發(fā)公司給你UI設(shè)計(jì)圖以后一定要大膽的說出自己的想法,哪里不合適就抓緊修改,UI設(shè)計(jì)完以后APP開發(fā)就正式開始了。
軟件開發(fā)的流程都有哪些步驟呢
軟件開發(fā)的流程都有哪些步驟
1計(jì)劃
對(duì)所要解決的問題進(jìn)行總體定義,包括了解用戶的要求及現(xiàn)實(shí)環(huán)境,從技術(shù)、經(jīng)濟(jì)和社會(huì)因素等3個(gè)方面研究并論證本軟件項(xiàng)目的可行性,編寫可行性研究報(bào)告,探討解決問題的方案,并對(duì)可供使用的資源(如計(jì)算機(jī)硬件、系統(tǒng)軟件、人力等)成本,可取得的效益和開發(fā)進(jìn)度作出估計(jì),制訂完成開發(fā)任務(wù)的實(shí)施計(jì)劃。
2分析做軟件致電壹伍扒+++壹壹叁叁++++駟柒駟駟
軟件需求分析就是對(duì)開發(fā)什么樣的軟件的一個(gè)系統(tǒng)的分析與設(shè)想。它是一個(gè)對(duì)用戶的需求進(jìn)行去粗取精、去偽存真、正確理解,然后把它用軟件工程開發(fā)語(yǔ)言(形式功能規(guī)約,即需求規(guī)格說明書)表達(dá)出來的過程。
3設(shè)計(jì)做軟件致電壹伍扒+++壹壹叁叁++++駟柒駟駟
軟件設(shè)計(jì)可以分為概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)兩個(gè)階段。實(shí)際上軟件設(shè)計(jì)的主要任務(wù)就是將軟件分解成模塊是指能實(shí)現(xiàn)某個(gè)功能的數(shù)據(jù)和程序說明、可執(zhí)行程序的程序單元。
4編碼
軟件編碼是指把軟件設(shè)計(jì)轉(zhuǎn)換成計(jì)算機(jī)可以接受的程序,即寫成以某一程序設(shè)計(jì)語(yǔ)言表示的“源程序清單”。充分了解軟件開發(fā)語(yǔ)言、工具的特性和編程風(fēng)格,有助于開發(fā)工具的選擇以及保證軟件產(chǎn)品的開發(fā)質(zhì)量。
5測(cè)試
軟件測(cè)試的目的是以較小的代價(jià)發(fā)現(xiàn)盡可能多的錯(cuò)誤。要實(shí)現(xiàn)這個(gè)目標(biāo)的關(guān)鍵在于設(shè)計(jì)一套出色的測(cè)試用例(測(cè)試數(shù)據(jù)與功能和預(yù)期的輸出結(jié)果組成了測(cè)試用例)。如何才能設(shè)計(jì)出一套出色的測(cè)試用例,關(guān)鍵在于理解測(cè)試方法。不同的測(cè)試方法有不同的測(cè)試用例設(shè)計(jì)方法。
6維護(hù)
維護(hù)是指在已完成對(duì)軟件的研制(分析、設(shè)計(jì)、編碼和測(cè)試)工作并交付使用以后,對(duì)軟件產(chǎn)品所進(jìn)行的一些軟件工程的活動(dòng)。即根據(jù)軟件運(yùn)行的情況,對(duì)軟件進(jìn)行適當(dāng)修改,以適應(yīng)新的要求,以及糾正運(yùn)行中發(fā)現(xiàn)的錯(cuò)誤。編寫軟件問題報(bào)告、軟件修改報(bào)告。
要寫一份畢業(yè)論文“學(xué)生成績(jī)管理系統(tǒng)”,它主要流程有哪些?怎么入手
學(xué)生成績(jī)管理系統(tǒng)基于JSP學(xué)生成績(jī)管理系統(tǒng)軟件的開發(fā)摘 要學(xué)生成績(jī)管理系統(tǒng)是典型的信息管理系統(tǒng)(MIS),它作為學(xué)生信息管理的基礎(chǔ),是實(shí)現(xiàn)校園信息化進(jìn)程當(dāng)中很重要的一個(gè)方面。其開發(fā)主要包括前端應(yīng)用程序的開發(fā)以及后臺(tái)數(shù)據(jù)庫(kù)的建立和維護(hù)[計(jì)算機(jī)畢業(yè)設(shè)計(jì)網(wǎng)站 ]兩個(gè)方面。本系統(tǒng)分析了現(xiàn)今學(xué)生成績(jī)管理系統(tǒng)中所應(yīng)用的幾個(gè)環(huán)節(jié),并針對(duì)每個(gè)環(huán)節(jié)做出了詳細(xì)的闡述和探討。分別從用戶管理、課程管理、成績(jī)管理、班級(jí)管理等四大模塊詳細(xì)地講述了軟件開發(fā)的具體步驟和整個(gè)過程,介紹了系統(tǒng)開發(fā)用到的JSP環(huán)境NetBeans IDE 4.1、使用的相關(guān)JSP技術(shù)和Java編程語(yǔ)言、引入MVC設(shè)計(jì)模式理念,以及后臺(tái)數(shù)據(jù)庫(kù)SQL-Server 2000的搭建與操作,并對(duì)模塊的功能進(jìn)行了具體分析和詳細(xì)設(shè)計(jì)。本系統(tǒng)主要功能包括:用戶管理、學(xué)生注冊(cè)、對(duì)班級(jí)信息、學(xué)生信息、班級(jí)課程、學(xué)校專業(yè)信息、課程信息、學(xué)生成績(jī)、教師信息、數(shù)據(jù)庫(kù)信息的錄入、查詢、添加、修改和刪除等,其中系統(tǒng)的核心是添加、修改和刪除三者之間的聯(lián)系,每一個(gè)表的修改都將聯(lián)動(dòng)地影響其它的表。
關(guān)鍵詞:學(xué)生成績(jī)管理系統(tǒng);NetBeans IDE 4.1;SQL-Server 2000;JSP;JAVA;MVC
目 錄論文總頁(yè)數(shù):共28頁(yè)1 引言. 11.1 學(xué)生成績(jī)管理系統(tǒng)的現(xiàn)狀及開發(fā)背景. 11.2 學(xué)生成績(jī)管理系統(tǒng)的主要特征. 11.3 系統(tǒng)的主要工作. 12 系統(tǒng)開發(fā)工具. 12.1 JSP技術(shù)與Java語(yǔ)言的概述. 22.1.1 JSP技術(shù)與ASP技術(shù)的比較. 22.1.2 Java語(yǔ)言的優(yōu)越性及其演變技術(shù). 22.2 MVC設(shè)計(jì)模式. 32.3 SQL-Server 2000 數(shù)據(jù)庫(kù)概述及特點(diǎn). 33 系統(tǒng)總體設(shè)計(jì). 33.1 系統(tǒng)分析. 33.1.1 系統(tǒng)調(diào)查分析. 43.1.2 對(duì)系統(tǒng)的綜合要求. 43.2 系統(tǒng)總體功能劃分. 43.3 系統(tǒng)流程圖. 53.4 系統(tǒng)結(jié)構(gòu)圖. 74 系統(tǒng)環(huán)境配置. 84.1 系統(tǒng)運(yùn)行環(huán)境. 84.2 系統(tǒng)概述. 85 數(shù)據(jù)庫(kù)設(shè)計(jì). 95.1 概念結(jié)構(gòu)設(shè)計(jì). 95.2 邏輯結(jié)構(gòu)設(shè)計(jì). 106 軟件設(shè)計(jì)與實(shí)現(xiàn). 126.1 系統(tǒng)登陸模塊. 126.2 學(xué)生功能模塊. 146.3 教師功能模塊. 166.4 管理員功能模塊. 177 系統(tǒng)測(cè)試分析. 247.1測(cè)試環(huán)境的搭建. 247.1.1 運(yùn)行環(huán)境. 247.1.2 環(huán)境配置. 247.2 測(cè)試方案的設(shè)計(jì). 247.3 測(cè)試結(jié)果. 25結(jié) 論. 26參 考 文 獻(xiàn). 26致 謝. 27聲 明. 28
軟件開發(fā)流程圖示例關(guān)于班級(jí)管理的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于班級(jí)管理系統(tǒng)用例圖、軟件開發(fā)流程圖示例關(guān)于班級(jí)管理的信息別忘了在本站進(jìn)行查找喔。