1、以特定的圖形符號加上說明,表示算法的圖,稱為流程圖或框圖。
創(chuàng)新互聯主要從事做網站、成都做網站、網頁設計、企業(yè)做網站、公司建網站等業(yè)務。立足成都服務臥龍,10多年網站建設經驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:18980820575
2、選擇對應的圖形,開始結束用橢圓形,過程用長方形。
3、繪制整個流程的過程。
4、將各個流程節(jié)點用線連接起來。
5、最后添加備注。
注意事項:
流程圖是流經一個系統(tǒng)的信息流、觀點流或部件流的圖形代表。在企業(yè)中,流程圖主要用來說明某一過程。這種過程既可以是生產線上的工藝流程,也可以是完成一項任務必需的管理過程。
#includestdlib.h
int N1,N2,kk1,kk2,kk3;
struct couse * head1;
struct student * head2;
struct couse//課程信息結構體
{
int num1;
char name1[20];
int score;
int nelepeo;//課程已選人數
int Melepeo;//課程人數上限
struct couse * next;
};
struct student//學生信息結構體
{
int num2;
char name2[20];
int nelenum[50];//已選課程編號
int nelen;//已選課程數量
struct student * next;
};
void Ms()
{
for(kk1=0;kk11100;kk1++)
for(kk2=0;kk21200;kk2++)
for(kk3=0;kk31200;kk3++);
}
void keyboardc()//錄入課程子函數(從鍵盤錄入)
{
struct couse *p1,*p2;
N1=0;
p1=p2=(struct couse*)malloc(sizeof(struct couse));
printf("課程編號\t課程名稱\t學分\t課程人數上限\n");
scanf("%d%s%d%d",p1-num1,p1-name1,p1-score,p1-Melepeo);
p1-nelepeo=0;
head1=NULL;
while(p1-num1!=0)
{
N1=N1+1;
if(N1==1)head1=p1;
else p2-next=p1;
p2=p1;
p1=(struct couse * )malloc(sizeof(struct couse));
scanf("%d%s%d%d",p1-num1,p1-name1,p1-score,p1-Melepeo);
p1-nelepeo=0;
}
p2-next=NULL;
}
void filec()//錄入鍵盤子函數(從文件錄入)
{
FILE * fp;
char filepath[20];
struct couse *p1,*p2;
N1=0;
printf("輸入要讀入的文件路徑:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"r"))==NULL)
{
printf("找不到%s文件!\n",filepath);
exit(0);
}
p1=p2=(struct couse*)malloc(sizeof(struct couse));
fscanf(fp,"%d%s%d%d%d",p1-num1,p1-name1,p1-score,p1-nelepeo,p1-Melepeo);
head1=NULL;
while(!feof(fp))
{
N1=N1+1;
if(N1==1)head1=p1;
else p2-next=p1;
p2=p1;
p1=(struct couse * )malloc(sizeof(struct couse));
fscanf(fp,"%d%s%d%d%d",p1-num1,p1-name1,p1-score,p1-nelepeo,p1-Melepeo);
}
p2-next=NULL;
}
void inputc()//錄入課程主函數
{
int i;
printf("\t\t\t錄入課程信息\n");
printf("\n1.從鍵盤錄入\n");
printf("2.從文件錄入\n");
printf("3.返回主菜單\n");
printf("請選擇(1~3):\n");
scanf("%d",i);
switch(i)
{
case(1):keyboardc();break;
case(2):filec();break;
case(3):break;
}
}
void insertc(struct couse *incouse)//課程管理子函數(增加課程)
{
struct couse *p0,*p1,*p2;
p1=head1;
p0=incouse;
if(head1==NULL)
{
head1=p0;
p0-next=NULL;
}
else
{
while((p0-num1 p1-num1) (p1-next!=NULL))
{
p2=p1;
p1=p1-next;
}
if(p0-num1 = p1-num1)
{
if(head1==p1) head1=p0;
else p2-next=p0;
p0-next=p1;
}
else
{
p1-next=p0;
p0-next=NULL;
}
}
N1=N1+1;
}
void delc(int num1)//課程管理子函數(刪除課程)
{
struct couse *p1,*p2;
if(head1==NULL)
{
printf("\n沒有課程,無法刪除!\n");
goto end;
}
p1=head1;
while(num1!=p1-num1 p1-next!=NULL)
{
p2=p1;
p1=p1-next;
}
if(num1==p1-num1)
{
if(p1==head1) head1=p1-next;
else p2-next=p1-next;
printf("已刪除該編號課程!\n");
N1=N1-1;
}
else printf("無該編號的課程!\n");
end:;
}
void managementc()//課程管理主函數
{
struct couse * incouse;
int i,num1;
printf("\t\t\t課程管理\n");
printf("1.新增課程\n");
printf("2.刪除課程\n");
printf("3.返回主菜單\n");
printf("請選擇(1~3):\n");
scanf("%d",i);
switch(i)
{
case(1):
{
incouse=(struct couse *)malloc(sizeof(struct couse));
printf("課程編號\t課程名稱\t學分\t課程人數上限\n");
scanf("%d%s%d%d",incouse-num1,incouse-name1,incouse-score,incouse-Melepeo);
incouse-nelepeo=0;
insertc(incouse);
break;
}
case(2):
{
printf("請輸入要刪除課程的編號:\n");
scanf("%d",num1);
delc(num1);
break;
}
case(3):break;
}
}
void keyboards()//錄入學生信息子函數(從鍵盤錄入)
{
int i;
struct student *p1,*p2;
N2=0;
p1=p2=(struct student *)malloc(sizeof(struct student));
printf("學生學號\t學生姓名\n");
scanf("%d%s",p1-num2,p1-name2);
p1-nelen=0;
for(i=0;i20;i++) p1-nelenum[i]=0;
head2=NULL;
while(p1-num2!=0)
{
N2=N2+1;
if(N2==1)head2=p1;
else p2-next=p1;
p2=p1;
p1=(struct student * )malloc(sizeof(struct student));
scanf("%d%s",p1-num2,p1-name2);
p1-nelen=0;
for(i=0;i20;i++) p1-nelenum[i]=0;
}
p2-next=NULL;
}
void files()//錄入學生信息子函數(從文件錄入)
{
int i=0;
FILE * fp;
char filepath[20];
struct student *p1,*p2;
N2=0;
printf("輸入要讀入的文件路徑:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"r"))==NULL)
{
printf("找不到%s文件!\n",filepath);
exit(0);
}
p1=p2=(struct student*)malloc(sizeof(struct student));
fread(p1,sizeof(struct student),1,fp);
head2=NULL;
while(!feof(fp))
{
i=0;
N2=N2+1;
if(N2==1)head2=p1;
else p2-next=p1;
p2=p1;
p1=(struct student * )malloc(sizeof(struct student));
fread(p1,sizeof(struct student),1,fp);
}
p2-next=NULL;
}
void inputs()//錄入學生信息主函數
{
int i;
printf("\t\t\t錄入學生信息\n");
printf("\n1.從鍵盤錄入\n");
printf("2.從文件錄入\n");
printf("3.返回主菜單\n");
printf("請選擇(1~3):\n");
scanf("%d",i);
switch(i)
{
case(1):keyboards();break;
case(2):files();break;
case(3):break;
}
}
void inserts(struct student * incouse)//學生信息管理子函數(填加學生信息)
{
struct student *p0,*p1,*p2;
p1=head2;
p0=incouse;
if(head2==NULL)
{
head2=p0;
p0-next=NULL;
}
else
{
while((p0-num2 p1-num2) (p1-next!=NULL))
{
p2=p1;
p1=p1-next;
}
if(p0-num2 = p1-num2)
{
if(head2==p1) head2=p0;
else p2-next=p0;
p0-next=p1;
}
else
{
p1-next=p0;
p0-next=NULL;
}
}
N2=N2+1;
}
void dels(int num2)//學生信息管理子函數(刪除學生信息)
{
struct student *p1,*p2;
if(head2==NULL)
{
printf("\n沒有該學生信息,無法刪除!\n");
goto end;
}
p1=head2;
while(num2!=p1-num2 p1-next!=NULL)
{
p2=p1;
p1=p1-next;
}
if(num2==p1-num2)
{
if(p1==head2) head2=p1-next;
else p2-next=p1-next;
printf("已刪除該學生信息!\n");
N2=N2-1;
}
else printf("無該學號的學生!\n");
end:;
}
void managements()//學生信息管理主函數
{
struct student * incouse;
int i,num2;
printf("\t\t\t學生信息管理\n");
printf("1.新增學生信息\n");
printf("2.刪除學生信息\n");
printf("3.返回主菜單\n");
printf("請選擇(1~3):\n");
scanf("%d",i);
switch(i)
{
case(1):
{
incouse=(struct student *)malloc(sizeof(struct student));
incouse-nelen=0;
incouse-nelenum[0]=0;
printf("學生學號\t學生姓名\n");
scanf("%d%s",incouse-num2,incouse-name2);
inserts(incouse);
break;
}
case(2):
{
printf("請輸入要刪除學生的學號:\n");
scanf("%d",num2);
dels(num2);
break;
}
case(3):break;
}
}
void elect(struct student * s)//選課
{
struct couse * p;
int num1,i;
printf("請輸入要選課的編號:\n");
scanf("%d",num1);
for(i=0;s-nelenum[i]!=0;i++);
s-nelenum[i]=num1;
(s-nelen)++;
p=head1;
while(p-num1!=num1) p=p-next;
(p-nelepeo)++;
}
void cheak()//學生選課子函數(查詢可選課程)
{
char e;
struct couse * c;
struct student * s;
int num2,i,j=0,t=0;
printf("請輸入你的學號:");
scanf("%d",num2);
s=head2;
while(s-num2!=num2 s-next!=NULL) s=s-next;
if(s-num2!=num2)
{
printf("不存在你的信息,請進入主菜單錄入你的信息!\n");
goto end;
}
c=head1;
printf("你的可選課程編號:\n");
while(c!=NULL)
{
for(t=0,i=0;s-nelenum[i]!=0;i++)
{
if(c-num1==s-nelenum[i]) t=1;
}
if(t==0 (c-nelepeo!=c-Melepeo))
{
printf("%d\n",c-num1);
j++;
}
c=c-next;
}
if(j==0)
{
printf("你已選完所有課程,無法再多選!\n");
goto end;
}
printf("選課(y/n)?:\n");
getchar();
e=getchar();
i=0;
while(e=='y')
{
elect(s);
printf("繼續(xù)選課(y/n)?:\n");
getchar();
e=getchar();
}
end:;
}
void back(struct student * p)//退課
{
struct couse * p1;
int num1,i,j;
printf("請輸入你要退掉的課程編號:\n");
scanf("%d",num1);
p1=head1;
while(p1-num1!=num1) p1=p1-next;
for(i=0;p-nelenum[i]!=num1;i++);
for(j=i;p-nelenum[j]!=0;j++) p-nelenum[j]=p-nelenum[j+1];
p-nelenum[--j]=0;
(p1-nelepeo)--;
printf("退課成功!\n");
}
void hcheak()//學生選課子函數(查詢已選課程)
{
char c;
struct couse * p0;
struct student * p;
int num2,i,f=0;
printf("請輸入學號:\n");
scanf("%d",num2);
p=head2;
while(p-num2!=num2 p!=NULL) p=p-next;
if(p==NULL)
{
printf("不存在你的信息,請回主菜單錄入信息:\n");
goto end;
}
printf("已選課程編號:\n");
if(p-nelenum[0]==0)
{
printf("你還沒選課!\n");
goto end;
}
for(i=0;p-nelenum[i]!=0;i++)
{
printf("%d\n",p-nelenum[i]);
p0=head1;
while(p0-num1!=p-nelenum[i]) p0=p0-next;
f=f+p0-score;
}
printf("總學分:%d\n",f);
printf("是否進行退課(y/n)?");
getchar();
c=getchar();
while(c=='y')
{
back(p);
printf("繼續(xù)退課(y/n)?");
getchar();
c=getchar();
(p-nelen)--;
}
end:;
}
void elective()//學生選課主函數
{
int i;
printf("\t\t\t學生選課\n");
printf("1.查詢可選課程\n");
printf("2.查詢已選課程\n");
printf("3.返回主菜單\n");
printf("請輸入(1~3):\n");
scanf("%d",i);
switch(i)
{
case(1):cheak();break;
case(2):hcheak();break;
case(3):break;
}
}
void listc()//輸出課程信息
{
struct couse * p;
p=head1;
printf("課程編號 課程名稱 學分 課程已選人數 課程人數上限\n");
while(p!=NULL)
{
printf("%-8d%10s%6d%8d%12d\n",p-num1,p-name1,p-score,p-nelepeo,p-Melepeo);
p=p-next;
}
}
void lists()//輸出學生信息
{
struct student * p;
p=head2;
printf("學生學號 學生姓名 已選課程數量\n");
while(p!=NULL)
{
printf("%-4d %10s %6d\n",p-num2,p-name2,p-nelen);
p=p-next;
}
}
void intoc()//存儲課程信息
{
FILE * fp;
struct couse * p;
char filepath[30];
printf("輸入課程信息要保存的文件路徑:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"w"))==NULL)
{
printf("\n保存失敗!");
exit(0);
}
p=head1;
while(p!=NULL)
{
fprintf(fp,"%d %s %d %d %d\n",p-num1,p-name1,p-score,p-nelepeo,p-Melepeo);
p=p-next;
}
fclose(fp);
printf("課程信息已保存在%s中!\n",filepath);
}
void intos()//存儲學生信息
{
FILE * fp;
struct student * p;
char filepath[30];
printf("輸入學生信息要保存的文件路徑:");
getchar();
gets(filepath);
if((fp=fopen(filepath,"w"))==NULL)
{
printf("\n保存失敗!");
exit(0);
}
p=head2;
while(p!=NULL)
{
fwrite(p,sizeof(struct student),1,fp);
p=p-next;
}
fclose(fp);
printf("學生信息已保存在%s中!\n",filepath);
}
void into()//存儲信息
{
int i;
printf("1.存儲課程信息\n");
printf("2.存儲學生信息\n");
printf("3.返回主菜單\n");
printf("請輸入(1~3)\n");
scanf("%d",i);
switch(i)
{
case(1):intoc();break;
case(2):intos();break;
case(3):break;
}
}
void store()//信息主函數
{
int i;
printf("\t\t系統(tǒng)信息查看及存儲\n");
printf("1.查看課程信息\n");
printf("2.查看學生信息\n");
printf("3.存儲信息\n");
printf("4.返回主菜單\n");
printf("請輸入(1~4):\n");
scanf("%d",i);
switch(i)
{
case(1):listc();break;
case(2):lists();break;
case(3):into();break;
case(4):break;
}
}
int main()//主函數
{
int i;
start:
printf("\n\t\t\t歡迎使用學生選課系統(tǒng)!\n");
printf("菜單:\n");
printf("1.錄入課程信息\n");
printf("2.課程管理\n");
printf("3.錄入學生信息\n");
printf("4.學生信息管理\n");
printf("5.學生選課\n");
printf("6.系統(tǒng)信息查看及存儲\n");
printf("7.退出系統(tǒng)\n");
printf("\n請輸入菜單選項(1~7):\n");
scanf("%d",i);
if(i1 || i7)
{
printf("輸入錯誤,請重輸:\n");
goto start;
}
switch(i)
{
case(1):
{
system("cls");
inputc();
goto start;
break;
}
case(2):
{
system("cls");
managementc();
goto start;
break;
}
case(3):
{
system("cls");
inputs();
goto start;
break;
}
case(4):
{
system("cls");
managements();
goto start;
break;
}
case(5):
{
system("cls");
elective();
goto start;
break;
}
case(6):
{
system("cls");
store();
goto start;
break;
}
case(7):
{
system("cls");
printf("感謝使用本系統(tǒng)!\n\n再見!\n");
}
}
return(0);
}
畫主程序流程圖,看懂主函數的程序,按照main()函數中的具體書寫過程來畫,例如:程序開始、定義變量、初始化變量、使用選擇或者循環(huán)或者順序結構、調用某一個子函數、(可以沒有)程序結束。
如果會編程序而不會畫流程圖,建議先把自己的程序研究一遍。
若是畫主程序流程圖,那就需看懂主函數的程序,按照main()函數中的具體書寫過程來畫,例如:
程序開始---定義變量---初始化變量---使用選擇或者循環(huán)或者順序結構---調用某一個子函數(可以沒有)---程序結束
以上是最簡單的程序流程圖畫法。
若你是畫某一算法或是某一模塊的流程圖,就要把相應的算法或是模塊看懂。分析算法或是模塊的具體走法,根據此走法就可以畫出對應的流程圖。
如果你是初學者,想根據流程圖的畫法而去嘗試編程,建議就一定要研究清楚每一個使用到的算法,讀懂題目再開始編程。
下面是使VISO畫流程圖的幾個要點:
1、選擇下載一個合適版本的VISO
2、程序開始結束用膠囊
3、分頁用圓圈
4、輸入用平行四邊形
5、語句用方塊
6、判斷用菱形
7、打印用波浪