A. 跪求一個java課程設計, 學生信息管理系統 含全源代碼 設計報告
可以試試看啊
以下方法實現了用戶界面登陸
import java.awt.*;
import java.awt.event.*;
public class DengLuJieMian extends Frame implements ActionListener
{
Label username=new Label("用戶名:");//使用文本創建一個用戶名標簽
TextField t1=new TextField();//創建一個文本框對象
Label password=new Label("密碼:");//創建一個密碼標簽
TextField t2=new TextField();
Button b1=new Button("登陸");//創建登陸按鈕
Button b2=new Button("取消");//創建取消按鈕
public DengLuJieMian()
{
this.setTitle("學生信息管理系統");//設置窗口標題
this.setLayout(null);//設置窗口布局管理器
username.setBounds(50,40,60,20);//設置姓名標簽的初始位置
this.add(username);// 將姓名標簽組件添加到容器
t1.setBounds(120,40,80,20);// 設置文本框的初始位置
this.add(t1);// 將文本框組件添加到容器
password.setBounds(50,100,60,20);//密碼標簽的初始位置
this.add(password);//將密碼標簽組件添加到容器
t2.setBounds(120,100,80,20);//設置密碼標簽的初始位置
this.add(t2);//將密碼標簽組件添加到容器
b1.setBounds(50,150,60,20);//設置登陸按鈕的初始位置
this.add(b1);//將登陸按鈕組件添加到容器
b2.setBounds(120,150,60,20);//設置取消按鈕的初始位置
this.add(b2);// 將取消按鈕組件添加到容器
b1.addActionListener(this);//給登陸按鈕添加監聽器
b2.addActionListener(this);// 給取消按鈕添加監聽器
this.setVisible(true);//設置窗口的可見性
this.setSize(300,200);//設置窗口的大小
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});//通過內部類重寫關閉窗體的方法
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==b1)//處理登陸事件
{
String name=t1.getText();
String pass=t2.getText();
if(name!=null&&pass.equals("000123"))//判斷語句
{
new StudentJieMian();
}
}
}
public static void main(String args[])//主函數
{
new DengLuJieMian();
}
}
以下方法實現了學生界面設計
import java.awt.*;
import java.awt.event.*;
class StudentJieMian extends Frame implements ActionListener
{
MenuBar m=new MenuBar();//創建菜單欄
Menu m1=new Menu("信息");//創建菜單「信息」
MenuItem m11=new MenuItem("插入");//創建「插入」的菜單項
MenuItem m12=new MenuItem("查詢");
Menu m2=new Menu("成績");//創建菜單「成績」
MenuItem m21=new MenuItem("查詢");
public StudentJieMian()
{
this.setTitle("學生界面");//設置窗口標題
this.setLayout(new CardLayout());//設置窗口布局管理器
this.setMenuBar(m);//將菜單欄組件添加到容器
m.add(m1);//將信息菜單放入菜單欄
m.add(m2);
m1.add(m11);//將「插入」菜單項添加到「信息」菜單
m1.add(m12); //將「查詢」菜單項添加到「信息」菜單
m2.add(m21); //將「查詢」菜單項添加到「成績」菜單
m11.addActionListener(this); //給「插入」菜單項添加監聽器
m12.addActionListener(this); //給「查詢」菜單項添加監聽器
m21.addActionListener(this); //給「查詢」菜單項添加監聽器
this.setVisible(true); //設置窗口的可見性
this.setSize(300,200); //設置窗口的大小
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);//關閉窗口
}
});
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==m11) //處理「添加信息」事件
{
new AddStudent();
}
if(e.getSource()==m12) //處理「查詢信息」事件
{
new SelectStudent();
}
if(e.getSource()==m21) //處理「查詢成績」事件
{
new ChengJiStudent();
}
}
public static void main(String args[])
B. 求 c++課程設計源代碼
學生信息管理系統、學生成績管理系統、職工信息管理系
C. 急!求C語言學生選修課程系統設計的源代碼!以及課程設計報告書!
這種東西到處都有, 抄一個就可以了, 我給你找了一個沒有用戶圖形界面的, 可以自己用MFC進行包裝
設計題目 學生成績管理系統
已知技術參數和設計要求
現有學生成績信息文件1(1.txt),內容如下
姓名 學號 語文 數學 英語
張明明 01 67 78 82
李成友 02 78 91 88
張輝燦 03 68 82 56
王露 04 56 45 77
陳東明 05 67 38 47
…. .. .. .. …
學生成績信息文件2(2.txt),內容如下:
姓名 學號 語文 數學 英語
陳果 31 57 68 82
李華明 32 88 90 68
張明東 33 48 42 56
李明國 34 50 45 87
陳道亮 35 47 58 77
…. .. .. .. …
試編寫一管理系統,要求如下:
1、 實現對兩個文件數據進行合並,生成新文件3.txt
2、 抽取出三科成績中有補考的學生並保存在一個新文件4.txt
3、 對合並後的文件3.txt中的數據按總分降序排序(至少採用兩種排序方法實現)
4、 輸入一個學生姓名後,能查找到此學生的信息並輸出結果(至少採用兩種查找方法實現)
5、 要求使用結構體,鏈或數組等實現上述要求.
採用多種方法且演算法正確者,可適當加分.
設計內容與步驟 1、 結點結構的設計
2、 演算法設計與分析
3、 程序設計、實現、調試
4、 課程設計說明書
#include<iostream.h>
#include<string.h>
#include<fstream.h>
class stu
{
char name[20];
double math,chinese,english,average,sum;
public:
stu()
{
}
stu(char n[20],double ma,double chin,double eng)
{
strcpy(name,n);
math=ma;
chinese=chin;
english=eng;
}
double getsum()
{
sum=chinese+english+math;
return sum;
}
double getaver()
{
average=getsum()/3;
return average;
}
friend void main();
};
void main()
{
cout<<"請選擇您需要的操作!"<<endl;
cout<<"操作:"<<endl;
cout<<"(0)數據錄入"<<endl;
cout<<"(1)增加人員"<<endl;
cout<<"(2)刪除人員"<<endl;
cout<<"(3)修改數據"<<endl;
cout<<"查詢:"<<endl;
cout<<"(4)按總成績查詢"<<endl;
cout<<"(5)按姓名查詢"<<endl;
cout<<"(6)輸出所有學生的數據"<<endl;
cout<<"成績名詞"<<endl;
cout<<"(7)按總分查詢排名"<<endl;
cout<<"(8)按語文查詢排名"<<endl;
cout<<"(9)按數學查詢排名"<<endl;
cout<<"(y)按英語查詢排名"<<endl;
cout<<"選擇相關操作請輸入相對的括弧里的阿拉伯數字!"<<endl;
char p;char w;
stu *s[50];
ofstream *file[50];
int i=0;
int j=0;
bool flag2=0;
do
{
cin>>p;
if((p>='0'&&p<='10'))
flag2=1;
else
cout<<"指令錯誤!請重新輸入:"<<endl;
}while(flag2==0);
do{
switch(p)
{
case '0':
{
char c;
char name[20];double math,chinese,english;
do{
cout<<"請輸入姓名"<<endl;
cin>>name;
cout<<"請輸入數學成績:"<<endl;
cin>>math;
cout<<"請輸入語文成績:"<<endl;
cin>>chinese;
cout<<"請輸入外語成績:"<<endl;
cin>>english;
file[j]=new ofstream("d:\\document",ios::ate);
*file[j]<<"姓名"<<name<<"數學成績"<<math<<"語文成績"<<chinese<<"外語成績"<<english<<endl;
j++;
s[i]=new stu(name, math, chinese, english);
i++;
cout<<"數據錄入成功,想繼續錄入嗎(y/n)"<<endl;
cin>>c;
flag2=0;
do
{
if(c!='y'&&c!='n')
{
cout<<"指令錯誤!請重新輸入!"<<endl;
cin>>c;
}
else
flag2=1;
}while(flag2==0);
}while(c=='y');
break;
}
case '4':
{
double t;char c;
do
{
int flag1=0;
cout<<"請輸入你要查詢學生的總成績"<<endl;
cin>>t;
for(int q=0;q<i;q++)
{
if(s[q]->getsum()==t)
{
flag1=1;
cout<<"您要查詢的學生是:"<<(*s[q]).name<<endl;
}
}
if(flag1==0)
cout<<"對不起!您要查詢的學生不存在!"<<endl;
cout<<"您想繼續查詢嗎?(y/n)"<<endl;
cin>>c;
if(c!='y'&&c!='n')
{
cout<<"指令錯誤!請重新輸入!"<<endl;
cin>>c;
}
}
while(c=='y');
break;
}
case '5':
{
char n[20];int j=0;char c;
do{
int flag=0;
cout<<"請輸入你要查詢的學生姓名"<<endl;
cin>>n;
for(int j=0;j<i;j++)
{
if(strcmp(n,(*s[j]).name)==0)
{
flag=1;
cout<<"您要查詢的學生是:"<<(*s[j]).name<<endl;
cout<<(*s[j]).name<<"的總成績成績是"<<(*s[j]).getsum()<<endl<<"平均成績是:"<<(*s[j]).getaver()<<endl;
}
}
if(flag==0)
cout<<"對不起!您要查詢的學生不存在!"<<endl;
cout<<"您想繼續查詢嗎?(y/n)"<<endl;
cin>>c;
if(c!='y'&&c!='n')
{
cout<<"指令錯誤!請重新輸入!"<<endl;
cin>>c;
}
}
while(c=='y');
break;
}
case '1':
{
char name[20];double math,chinese,english;
char c;
do
{
cout<<"請輸入您要增加的學生的姓名:"<<endl;
cin>>name;
cout<<"請輸入數學成績:"<<endl;
cin>>math;
cout<<"請輸入語文成績:"<<endl;
cin>>chinese;
cout<<"請輸入外語成績:"<<endl;
cin>>english;
file[j]=new ofstream("d:\\document",ios::ate);
*file[j]<<"姓名"<<name<<"數學成績"<<math<<"語文成績"<<chinese<<"外語成績"<<english<<endl;
j++;
s[i]=new stu(name, math, chinese, english);
i++;
cout<<"數據錄入成功,想繼續錄入嗎(y/n)"<<endl;
cin>>c;
if(c!='y'&&c!='n')
{
cout<<"指令錯誤!請重新輸入!"<<endl;
cin>>c;
}
}while(c=='y');
break;
}
case '2':
{
char name[20];bool flag3=0;char c;
do{
cout<<"請輸入您要刪除的學生姓名:"<<endl;
cin>>name;
for(int h=0;h<i;h++)
{
if(strcmp(name,s[h]->name)==0)
{
flag3=1;
i--;
do{
s[h]=s[h+1];
h++;
}while(h<=i);
}
}
if(flag3==0)
cout<<"您要求刪除的對象本來就不存在!請檢查輸入的正確性!";
cout<<"要繼續刪除嗎?(y/n)"<<endl;
cin>>c;
if(c!='y'&&c!='n')
{
cout<<"指令錯誤!請重新輸入!"<<endl;
cin>>c;
}
}while(c=='y');
break;
}
case '3':
{
char name[20];double mat,chin,eng;flag2=0;
char c;
do
{
cout<<"請輸入您要修改的學生的姓名:"<<endl;
cin>>name;
for(int h=0;h<i;h++)
{
if(strcmp(name,s[h]->name)==0)
{
flag2=1;
cout<<"請輸入新的數學成績:"<<endl;
cin>>mat;
cout<<"請輸入新的語文成績:"<<endl;
cin>>chin;
cout<<"請輸入新的外語成績:"<<endl;
cin>>eng;
s[h]->chinese=chin;
s[h]->math=mat;
s[h]->english=eng;
cout<<"數據修改成功!";
}
}
if(flag2==0)
{
cout<<"您要修改的學生本來就不存在!請檢查重新輸入!"<<endl;
}
cout<<"想繼續修改嗎(y/n)"<<endl;
cin>>c;
if(c!='y'&&c!='n')
{
cout<<"指令錯誤!請重新輸入!"<<endl;
cin>>c;
}
}while(c=='y');
break;
}
case '6':
{
cout<<"本系統所有學生數據如下:"<<endl;
if(i==0)
cout<<"管理系統中沒有錄入數據或者數據已經被刪除!"<<endl;
for(int k=0;k<i;k++)
{
cout<<k+1<<" "<<"姓名:"<<" "<<s[k]->name<<
"語文:"<<" "<<s[k]->chinese<<"數學:"<<" "<<s[k]->math
<<"外語:"<<" "<<s[k]->english<<"總分:"<<" "<<(*s[k]).getsum()
<<"平均分:"<<" "<<(*s[k]).getaver()<<endl;
}
break;
}
case '7':
{
int t;stu b;
cout<<"本系統所以學生排名如下:"<<endl;
for(int x=0;x<i-1;x++)
{
t=x;
for(int y=x+1;y<i;y++)
{
if((s[t]->getsum())<(s[y]->getsum()))
t=y;
if(t!=x)
{
b=*s[x];
*s[x]=*s[t];
*s[t]=b;
}
}
}
if(i==0)
cout<<"管理系統中沒有錄入數據或者數據已經被刪除!";
for(int k=0;k<i;k++)
{
cout<<k+1<<" "<<"姓名:"<<" "<<s[k]->name<<
"語文:"<<" "<<s[k]->chinese<<"數學:"<<" "<<s[k]->math
<<"外語:"<<" "<<s[k]->english<<"總分:"<<" "<<s[k]->getsum()
<<"平均分:"<<" "<<s[k]->getaver()<<endl;
}
break;
}
case '8':
{
int t;stu b;
cout<<"本系統所以學生語文排名如下:"<<endl;
for(int x=0;x<i-1;x++)
{
t=x;
for(int y=x+1;y<i;y++)
{
if((s[t]->chinese)<(s[y]->chinese))
t=y;
if(t!=x)
{
b=*s[t];
*s[t]=*s[x];
*s[x]=b;
}
}
}
if(i==0)
cout<<"管理系統中沒有錄入數據或者數據已經被刪除!";
for(int k=0;k<i;k++)
{
cout<<k+1<<" "<<"姓名:"<<" "<<s[k]->name<<
"語文:"<<" "<<s[k]->chinese<<"數學:"<<" "<<s[k]->math
<<"外語:"<<" "<<s[k]->english<<"總分:"<<" "<<s[k]->getsum()
<<"平均分:"<<" "<<s[k]->getaver()<<endl;
}
break;
}
case '9':
{
int t;stu b;
cout<<"本系統所以學生數學排名如下:"<<endl;
for(int x=0;x<i-1;x++)
{
t=x;
for(int y=x+1;y<i;y++)
{
if((s[t]->math)<(s[y]->math))
t=y;
if(t!=x)
{
b=*s[t];
*s[t]=*s[x];
*s[x]=b;
}
}
}
if(i==0)
cout<<"管理系統中沒有錄入數據或者數據已經被刪除!";
for(int k=0;k<i;k++)
{
cout<<k+1<<" "<<"姓名:"<<" "<<s[k]->name<<
"語文:"<<" "<<s[k]->chinese<<"數學:"<<" "<<s[k]->math
<<"外語:"<<" "<<s[k]->english<<"總分:"<<" "<<s[k]->getsum()
<<"平均分:"<<" "<<s[k]->getaver()<<endl;
}
break;
}
case 'y':
{
int t;stu b;
cout<<"本系統所以學生英語排名如下:"<<endl;
for(int x=0;x<i-1;x++)
{
t=x;
for(int y=x+1;y<i;y++)
{
if((s[t]->english)<(s[y]->english))
t=y;
if(t!=x)
{
b=*s[t];
*s[t]=*s[x];
*s[x]=b;
}
}
}
if(i==0)
cout<<"管理系統中沒有錄入數據或者數據已經被刪除!";
for(int k=0;k<i;k++)
{
cout<<k+1<<" "<<"姓名:"<<" "<<s[k]->name<<
"語文:"<<" "<<s[k]->chinese<<"數學:"<<" "<<s[k]->math
<<"外語:"<<" "<<s[k]->english<<"總分:"<<" "<<s[k]->getsum()
<<"平均分:"<<" "<<s[k]->getaver()<<endl;
}
}
break;
}
cout<<"您想繼續進行其他操作嗎?(y/n)"<<endl;
bool flag4=0;
do
{
cin>>w;
if(w!='y'&&w!='n')
cout<<"指令錯誤!請重新輸入!"<<endl;
else
flag4=1;
}while(flag4==0);
if(w=='y')
cout<<"請輸入操作代碼(0 錄入/4 按總分查詢/5 按姓名查詢/1 增加人員/2 刪除人員/3 修改數據/6 顯示所有成員數據/7 按總分排名/8 按語文排名/9按數學排名/y按英語排名)"<<endl;
cin>>p;
}while(w=='y');
for(int x=0;x<i;x++)
{
delete s[x];
cout<<"delete all members!"<<endl;
}
}
D. c++課程設計源代碼
c++課程設計 學生管理系統源代碼
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
typedef struct stu
{
char name[20];
long int number;
int snum;
char sex[20];
char add[30] ;
char time[20];
char tel[20];
struct stu *next;
}stu,*student;
int init(student &s);
void insert(student &s);
void print(student &s);
int delete(student &s);
void find (student &s);
void findname(student &s);
void findnum(student &s);
void modifay(student &s);
void putfile(student &s);
void getfile(student &s);
void main()
{
student s;
init(s);
cout<<"歡迎使用學生管理系統."<<endl;
cout<<" "<<endl;
cout<<endl;
while(1)
{
int i;
mainint:
cout<<"請選擇相關操作:"<<endl<<"1.建立學生資料文件."<<endl<<"2.瀏覽."<<endl<<"3.刪除."<<endl;
cout<<"4.查詢."<<endl<<"5.修改."<<endl<<"6.打開學生文件."<<endl<<"7.退出管理系統." <<endl<<"請選擇:";
cin>>i;
if(i<0||i>7)
{
cout<<"輸入了錯誤的數字,Again!"<<endl<<endl;
goto mainint;
}
switch(i)
{
case 1: insert(s);break;
case 2: print(s);
putfile(s);
break;
case 3: ldelete(s);break;
case 4: find(s);break;
case 5: modifay(s);
break;
case 6: getfile(s);break;
case 7: exit(0);
}
}
}
int init(student &s)
{
s=(student)malloc(sizeof(stu));
if (s)
{
s->next=NULL;
return 0;
}
else return -1;
}
void insert(student &s) //insert
{
cout<<endl;
student p,q;
p=(student)malloc(sizeof(stu));
cout<<"請輸入學生信息:"<<endl;
cout<<"姓名:";
cin>>p->name;
cout<<endl;
cout<<"學號:";
cin>>p->number;
cout<<endl;
cout<<"性別:";
cin>>p->sex;
cout<<endl;
cout<<"家庭住址:" ;
cin>>p->add;
cout<<endl;
cout<<"出生年月:" ;
cin>>p->time;
cout<<endl;
cout<<"宿舍號:";
cin>>p->snum;
cout<<endl;
cout<<"宿舍號碼:";
cin>>p->tel;
q=s;
while(!(q->next==NULL)&&(q->next->number<p->number))
q=q->next;
p->next=q->next;
q->next=p;
//if()p->next=NULL;
//free(p);
}
int ldelete(student &s) //delete
{
cout<<endl;
student p,a;
p=s ;
cout<<"請輸入刪除的學號:";
long int number;
cin>>number;
while(p)
{ if (p->number==number)
{
a->next=p->next;
free(p); return(0);}
else
{ a=p;
p=p->next;} }
cout<<"沒有找到你要刪除的選項!"<<endl<<endl;return(-1);
}
void print(student &s)
{
int a;
a=0;
student p;
p=s->next;
cout<<"姓名 "<<"學號 " <<"性別 "<<"家庭住址 "<<"出生年月 "<<"宿舍號"<<"宿舍號碼"<<endl;
while(p)
{
a++;
cout<<p->name<<" "<<p->number<<" "<<p->sex<<" "<<p->add<<" "<<p->time<<" "<<p->snum<<" "<<p->tel<<" "<<endl;
p=p->next;
}
cout<<endl;
if (a==0)
cout<<"還沒有學生信息!"<<endl<<endl ;
}
void find (student &s) //find
{
findl:
cout<<"請選擇查找方法:"<<endl<<"1.按姓名查找."<<endl<<"2.按學號查找."<<endl;
cout<<"請選擇:";
int k;
cin>>k;
if(k<0||k>3)
{
cout<<"輸了入錯誤數字,Again!"<<endl<<endl;
goto findl;
}
switch(k)
{
case 1: findname(s);break;
case 2: findnum(s);break;
}
}
void findname(student &s) //find by name
{
student p;
p=s->next;
cout<<"請輸入姓名:";
char name[20];
int j;
j=0;
cin>>name;
cout<<"你要查找的資料是:"<<endl;
cout<<"姓名 "<<"學號 " <<"性別 "<<"家庭住址 "<<"出生日期 "<<"宿舍號 "<<"宿舍號碼"<<endl;
while(p)
{
if (strcmp(p->name,name)==0)
{
cout<<p->name<<" "<<p->number<<" "<<p->sex<<" "<<p->add<<" "<<p->time<<" "<<p->snum<<" "<<p->tel<<" "<<endl;
j++;
}
p=p->next;
}
cout<<endl;
if(j==0)
cout<<"對不起,沒找到你要的信息!"<<endl<<endl ;
}
void findnum(student &s) //find by number
{
student p;
p=s->next;
cout<<"請輸入學號:";
long int number;
int j;
j=0;
cin>>number;
cout<<"你要查找的資料是:"<<endl;
cout<<"姓名 "<<"學號 "<<"性別 "<<"家庭住址 "<<"出生日期 "<<"宿舍號 "<<"宿舍電話"<<endl;
while(p)
{
if (p->number==number)
{
cout<<p->name<<" "<<p->number<<" "<<p->sex<<" "<<p->add<<" "<<p->time<<" "<<p->snum<<" "<<p->tel<<" "<<endl;
j++;
}
p=p->next;
}
cout<<endl;
if(j==0)
cout<<"對不起,沒找到你要的信息"<<endl<<endl ;
}
void modifay(student &s) //modifay
{
student q,p,l,m;
int j;
j=0;
q=s->next;
l=s;
m=s;
cout<<"請輸入要修改的學號:" ;
long int num;
cin>>num;
cout<<"姓名 "<<"學號 "<<"性別 "<<"家庭住址 "<<"入學時間 "<<"宿舍號 "<<"電話號碼"<<endl;
while(q)
{
if (q->number==num)
{
cout<<"你要修改的信息是:"<<endl;
cout<<q->name<<" "<<q->number<<" "<<q->sex<<" "<<q->add<<" "<<q->time<<" "<<q->snum<<" "<<q->tel<<" "<<endl;
j++;
p=(student)malloc(sizeof(stu));
cout<<"請輸入新的學生信息:"<<endl;
cout<<"姓名:";
cin>>p->name;
cout<<endl;
cout<<"學號:";
cin>>p->number;
cout<<endl;
cout<<"年齡:";
cin>>p->age;
cout<<endl;
cout<<"性別:";
cin>>p->sex;
cout<<endl;
cout<<"家庭住址:" ;
cin>>p->add;
cout<<endl;
cout<<"入學時間:" ;
cin>>p->time;
cout<<endl;
cout<<"電話號碼:";
cin>>p->tel;
l->next=q->next;
free(q);
goto tt;
}
else
{
l=q;
q=q->next;
}
}
cout<<endl;
if (j==0) cout<<"沒找到你要的數據!"<<endl<<endl ;
tt:
while(!(m->next==NULL)&&(m->next->number<p->number))
m=m->next;
p->next=m->next;
m->next=p;
}
void putfile(student &s)
{
student p;
p=s->next;
FILE *fp;
if((fp=fopen("information.txt","w"))==NULL)
{
cout<<"打不開文件"<<endl<<endl;
exit(0);
}
while(p)
{
if(fwrite(p,sizeof(struct stu),1,fp)!=1 )
{
cout<<"文件寫入錯誤"<<endl<<endl;
return;
}
p=p->next;
}
fclose(fp) ;
}
void getfile(student &s)
{
student p,q;
q=s;
FILE *fp1 ;
if((fp1=fopen("information.txt","r"))==NULL)
{
cout<<"打不開文件"<<endl;
exit(0);
}
cout<<"姓名 "<<"學號 "<<"性別 "<<"家庭住址 "<<"入學時間 "<<"宿舍號 "<<"電話號碼"<<endl;
p=(student)malloc(sizeof(stu));
while(fread(p,sizeof(struct stu),1,fp1)!=0)
{
cout<<p->name<<" "<<p->number<<" "<<p->sex<<" "<<p->add<<" "<<p->time<<" "<<p->age<<" "<<p->tel<<endl;
while(!(q->next==NULL)&&(q->next->number<p->number))
q=q->next;
p->next=q->next;
q->next=p;
p=(student)malloc(sizeof(stu));
}
fclose(fp1);
cout<<endl;
}
E. 有沒有朋友知道源碼時代UI設計學費大概是多少啊
各地各個品牌的UI設計學費都在15,000塊錢以上。基本上市場價位就是在15,000到2萬塊錢之間。不同品牌不同地方的,有差價也不過2000。但是你需要注意同樣的價位之下,水平可是參差不齊,甚至是天壤之別的,可不要選錯了。
F. 黑馬和源碼的前端課程那家好,求推薦
在源碼和黑馬的同學培訓一起吃放的時候,從一個開發兩年的角度來說,感覺源碼的課程設計更貼將實際開發哦。
G. 高分求C語言課程設計源代碼(分不多了,全部給你們)
#include <string>
#include <iostream>
#include <time.h>
#include <vector>
using namespace std;
class Employee //定義雇員類
{
public:
Employee(); //構造函數
virtual VEmployee();
virtual void Display()=0;
int GetAge(); //獲取年齡
string GetName(); //獲取姓名
protected:
int Id; //職工ID號
string Name; //職工姓名
char Sex[5]; //性別
int Wage; //工資
string BirthDay; //出身年月
string WorkTime; //參加工作時間
int Age; //年齡
};
class Worker : public Employee //定義工人類
{
public:
Worker();
virtual VWorker();
void Display();
};
class Teacher : public Employee //定義教師類
{
public:
Teacher();
virtual VTeacher();
void Display();
string GetAcademy();
private:
string Academy;
};
Employee::Employee()
{
}
Employee::VEmployee()
{
}
int Employee::GetAge()
{
return Age;
}
string Employee::GetName()
{
return Name;
}
Teacher::Teacher() //添加教師信息
{
cout<<"請輸入該教師的信息:"<<endl;
cout<<"職工編號 : "<<endl;
cin>>Id;
cout<<"姓名 : "<<endl;
cin>>Name;
cout<<"性別 : "<<endl;
cin>>Sex;
cout<<"工資 : "<<endl;
cin>>Wage;
cout<<"出生時間 : (格式xxxx/xx/xx)"<<endl;
cin>>BirthDay;
cout<<"參加工作時間 : (格式xxxx/xx/xx)"<<endl;
cin>>WorkTime;
cout<<"所屬院系 : "<<endl;
cin>>Academy;
//從生日里提取出生的年份
int Pos = BirthDay.find_first_of('/');
string BirthYear;
BirthYear.assign(BirthDay,0,Pos);
char chBirthYear[6];
strcpy(chBirthYear,BirthDay.c_str());
//獲取當前系統的年份
char NowYear[5];
time_t tnow = time(0);
strftime(NowYear , 5 , "%Y" , localtime(&tnow));
Age = atoi(NowYear)-atoi(chBirthYear); //計算年齡
}
Teacher::VTeacher()
{
}
void Teacher::Display(){ //display()同名函數,輸出教師信息
cout<<"職工編號 : "<<Id<<endl;
cout<<"姓名 : "<<Name<<endl;
cout<<"性別 : "<<Sex<<endl;
cout<<"工資 : "<<Wage<<endl;
cout<<"出生時間 : "<<BirthDay<<endl;
cout<<"參加工作時間 : "<<WorkTime<<endl;
cout<<"年齡 : "<<Age<<endl;
}
string Teacher::GetAcademy(){
return Academy;
}
Worker::Worker() //添加工人信息
{
cout<<"請輸入該工人的信息:"<<endl;
cout<<"職工編號 : "<<endl;
cin>>Id;
cout<<"姓名 : "<<endl;
cin>>Name;
cout<<"性別 : "<<endl;
cin>>Sex;
cout<<"工資 : "<<endl;
cin>>Wage;
cout<<"出生時間 : (格式xxxx/xx/xx)"<<endl;
cin>>BirthDay;
cout<<"參加工作時間 : (格式xxxx/xx/xx)"<<endl;
cin>>WorkTime;
//從生日里提取出生的年份
int Pos = BirthDay.find_first_of('/');
string BirthYear;
BirthYear.assign(BirthDay,0,Pos);
char chBirthYear[6];
strcpy(chBirthYear,BirthDay.c_str());
//獲取當前系統的年份
char NowYear[5];
time_t tnow = time(0);
strftime(NowYear , 5 , "%Y" , localtime(&tnow));
Age = atoi(NowYear)-atoi(chBirthYear); //計算年齡
}
Worker::VWorker()
{
}
void Worker::Display(){//display()同名函數,輸出工人信息
cout<<"職工編號 : "<<Id<<endl;
cout<<"姓名 : "<<Name<<endl;
cout<<"性別 : "<<Sex<<endl;
cout<<"工資 : "<<Wage<<endl;
cout<<"出生時間 : "<<BirthDay<<endl;
cout<<"參加工作時間 : "<<WorkTime<<endl;
cout<<"年齡 : "<<Age<<endl;
}
void AddTeacher(vector <Teacher> *TeaInfo) //新增老師對象
{
system("color 05A"); //設置當前窗口的背景色和前景色
Teacher TeaTemp;
(*TeaInfo).push_back(TeaTemp);
}
void AddWoker(vector <Worker> *WorkerInfo) //新增工人對象
{
system("color 05A");
Worker Wokertmp;
(*WorkerInfo).push_back(Wokertmp);
}
void DisplayAll(vector <Teacher> *TeaInfo,vector <Worker> *WokerInfo){ //顯示全部職工記錄
system("color 05A");
cout<<"所有教師的信息:"<<endl;
vector <Teacher>::iterator pTeaInfo;
for (pTeaInfo=(*TeaInfo).begin();(*TeaInfo).empty()!=1&&pTeaInfo!=(*TeaInfo).end();pTeaInfo++) //如果到達vector末尾,則退出
{
(*pTeaInfo).Display();
cout<<endl;
}
cout<<"所有工人的信息:"<<endl;
vector <Worker>::iterator pWorkerInfo;
for (pWorkerInfo=(*WokerInfo).begin();(*WokerInfo).empty()!=1&&pWorkerInfo!=(*WokerInfo).end();pWorkerInfo++) //如果到達vector末尾,則退出
{
(*pWorkerInfo).Display();
cout<<endl;
}
cout<<"按Enter返回"<<endl;
getchar(); getchar();
}
void DisAvgTeacherAge(vector <Teacher> *TeaInfo){ //查詢老師平均年齡
system("color 05A");
int SumAge = 0;
vector <Teacher>::iterator pTeaInfo;
for (pTeaInfo=(*TeaInfo).begin();(*TeaInfo).empty()!=1&&pTeaInfo!=(*TeaInfo).end();pTeaInfo++)//遍歷老師容器
{ //如果到達vector末尾,則退出
SumAge+= (*pTeaInfo).GetAge();
cout<<endl;
}
if((*TeaInfo).size()!=0)
cout<<"教師的平均年齡為"<<SumAge/((*TeaInfo).size())<<endl;
else cout<<"沒有記錄"<<endl;
cout<<"按Enter返回"<<endl;
getchar(); getchar();
}
void DisAvgWorkerAge(vector <Worker> *WokerInfo){
system("color 05A");
int SumAge = 0;
vector <Worker>::iterator pWorkerInfo;
for (pWorkerInfo=(*WokerInfo).begin();(*WokerInfo).empty()!=1&&pWorkerInfo!=(*WokerInfo).end();pWorkerInfo++) //如果到達vector末尾,則退出
{
SumAge+= (*pWorkerInfo).GetAge();
cout<<endl;
}
if((*WokerInfo).size()!=0)
cout<<"職工的平均年齡為"<<SumAge/((*WokerInfo).size())<<endl;
else cout<<"沒有記錄"<<endl;
cout<<"按Enter鍵返回"<<endl;
getchar(); getchar();
}
void DelTeacher(vector <Teacher> *TeaInfo){ //用於刪除老師信息
system("color 05A");
bool Hflag=false;
string SearchName;
vector <Teacher>::iterator pTeaInfo;
cout<<"請輸入您要刪除的老師的姓名:"<<endl;
cout<<"姓名: ";
cin>>SearchName;
for(pTeaInfo=(*TeaInfo).begin();(*TeaInfo).empty() != 1&&pTeaInfo!=(*TeaInfo).end();pTeaInfo++) //如果到達vector末尾,則退出
{
if (0==SearchName.compare((*pTeaInfo).GetName())) //如果找到要刪除老師的姓名,則執行
{
Hflag=true; //找到老師
(*TeaInfo).erase(pTeaInfo); //刪除vector中指定的老師
continue;
}
}
if (false==Hflag) //如果沒有該老師,則執行
{
cout<<"沒有該老師!"<<endl;
}
cout<<"按Enter返回"<<endl;
getchar(); getchar();
}
void DelWorker(vector <Worker> *WokerInfo) //用於刪除工人信息
{
system("color 05A");
bool Hflag=false;
string SearchName;
vector <Worker>::iterator pWorkerInfo;
cout<<"請輸入您要刪除的工人的姓名:"<<endl;
cout<<"姓名: ";
cin>>SearchName;
for(pWorkerInfo=(*WokerInfo).begin();(*WokerInfo).empty() != 1&&pWorkerInfo!=(*WokerInfo).end();pWorkerInfo++) //如果到達vector末尾,則退出
{
if (0==SearchName.compare((*pWorkerInfo).GetName())) //如果找到要刪除工人的姓名,則執行
{
Hflag=true; //找到工人
(*WokerInfo).erase(pWorkerInfo); //刪除vector中指定的工人
continue;
}
}
if (false==Hflag) //如果沒有該工人,則執行
{
cout<<"沒有該老師!"<<endl;
}
cout<<"按Enter返回"<<endl;
getchar();getchar();
}
void SearchByName(vector <Teacher> *TeaInfo,vector <Worker> *WokerInfo){ //按名字查找職工信息
system("color 05A");
bool Hflag=false;
string SearchName;
vector <Teacher>::iterator pTeaInfo;
cout<<"請輸入您要查找的職工的姓名:"<<endl;
cout<<"姓名: ";
cin>>SearchName;
for(pTeaInfo=(*TeaInfo).begin();pTeaInfo!=(*TeaInfo).end();pTeaInfo++)
{
if (0==SearchName.compare((*pTeaInfo).GetName())) //如果找到輸入的職工,則執行
{
Hflag=true; //找到職工
cout<<"這個人是老師,他的信息為:"<<endl;
(*pTeaInfo).Display(); //顯示職工信息
continue;
}
}
vector <Worker>::iterator pWorkerInfo;
for(pWorkerInfo=(*WokerInfo).begin();pWorkerInfo!=(*WokerInfo).end();pWorkerInfo++)
{
if (0==SearchName.compare((*pWorkerInfo).GetName())) //如果找到輸入的職工,則執行
{
Hflag=true; //找到職工
cout<<"這個人是老師,個人信息為:"<<endl;
(*pWorkerInfo).Display(); //顯示職工信息
continue;
}
}
if (false==Hflag)
{
cout<<"沒有這個職工!"<<endl; //沒有找到信息
}
cout<<"按Enter返回"<<endl; //返回
getchar(); getchar();
}
void DisTeacherByAcademy(vector <Teacher> TeaInfo){ //按系輸出教師信息
system("color 05A");
bool Hflag=false;
string SearchName;
vector <Teacher>::iterator pTeaInfo;
while((TeaInfo).empty()!=1) { //輸出所有指定系的老師
pTeaInfo=(TeaInfo).begin();
string Academy = (*pTeaInfo).GetAcademy();
cout<<"系:"<<Academy<<","<<"該系的老師有:"<<endl;
for(pTeaInfo=(TeaInfo).begin();(TeaInfo).empty()!=1&&pTeaInfo!=(TeaInfo).end();){
if (0==Academy.compare((*pTeaInfo).GetAcademy()))
{
(*pTeaInfo).Display();
cout<<endl;
(TeaInfo).erase(pTeaInfo);
pTeaInfo=(TeaInfo).begin();
}
else pTeaInfo++;
}
cout<<endl;
}
cout<<"按Enter返回"<<endl;
getchar(); getchar();
}
void WriteFile(vector <Teacher> *TeaInfo,vector <Worker> *WokerInfo) //生成新文件
{
FILE *fp;
if (NULL==(fp=fopen("Employee.txt","w+")))
{
cout<<"打開文件錯誤"<<endl;
exit(-1);
}
vector <Worker>::iterator pWorkerInfo;
vector <Teacher>::iterator pTeaInfo;
for(pTeaInfo=(*TeaInfo).begin();pTeaInfo!=(*TeaInfo).end();pTeaInfo++) //寫入vector中所有老師的信息
{
fputs("教師信息:\n",fp);
fprintf(fp,"姓名:%s\n",(*pTeaInfo).GetName().c_str());
fprintf(fp,"年齡:%d\n",(*pTeaInfo).GetAge());
fputs("\n",fp);
}
fputs("教師信息結束\n",fp);
for(pWorkerInfo=(*WokerInfo).begin();pWorkerInfo!=(*WokerInfo).end();pWorkerInfo++) //寫入vector中所有老師的信息
{
fputs("職工信息:\n",fp);
fprintf(fp,"姓名:%s\n",(*pWorkerInfo).GetName().c_str());
fprintf(fp,"年齡:%d\n",(*pWorkerInfo).GetAge());
fputs("\n",fp);
}
fputs("職工信息結束\n",fp);
fclose(fp);
}
void Mainmenu(){//菜單界面
system("color 05A"); //設置當前窗口的背景色和前景色
cout<<" ╭――――――――――《教職工管理系統》―――――――――╮"<<endl;
cout<<" ∣ 請選擇功能 ∣"<<endl;
cout<<" ├――――――――――――――――――――――――――――┤"<<endl;
cout<<" ∣ 1.新建並輸入職工數據 ∣"<<endl;
cout<<" ∣ 2.按條件輸出職工數據 ∣"<<endl;
cout<<" ∣ 3.刪除職工數據 ∣"<<endl;
cout<<" ∣ 0.退出 ∣"<<endl;
cout<<" ╰――――――――――――――――――――――――――――╯"<<endl;
cout<<" ――――――――――――――――――――――――――――――"<<endl;
cout<<" 請選擇您要服務的類別: " ;
}
void Insert(vector <Teacher> *TeaInfo,vector <Worker> *WorkerInfo) //增加職工數據菜單界面
{
system("color 05A"); //設置當前窗口的背景色和前景色
int select = -1;
while(select!=0)
{
cout<<" ╭――――――――――《增加職工數據》――――――――――╮"<<endl;
cout<<" ∣ 請選擇操作: ∣"<<endl;
cout<<" ├――――――――――――――――――――――――――――┤"<<endl;
cout<<" ∣ 1增加一位教師記錄 ∣"<<endl;
cout<<" ∣ 2增加一位工人記錄 ∣"<<endl;
cout<<" ∣ 0返回主菜單 ∣"<<endl;
cout<<" ╰――――――――――――――――――――――――――――╯"<<endl;
cin>>select;
switch(select){
case 1:AddTeacher(TeaInfo);break;
case 2:AddWoker(WorkerInfo);break;
case 3:Mainmenu();break;
default:
cout<<"回到主菜單!"<<endl;
}
}
}
void Search(vector <Teacher> *TeaInfo,vector <Worker> *WorkerInfo) //查詢職工數據菜單界面
{
system("color 05A"); //設置當前窗口的背景色和前景色
int select = -1;
while(select!=0)
{
cout<<" ╭――――――――――《查詢職工數據》――――――――――╮"<<endl;
cout<<" ∣ 請選擇操作: ∣"<<endl;
cout<<" ├――――――――――――――――――――――――――――┤"<<endl;
cout<<" ∣ 1顯示全部職工記錄 ∣"<<endl;
cout<<" ∣ 2按系輸出教師信息 ∣"<<endl;
cout<<" ∣ 3按姓名檢索所有信息 ∣"<<endl;
cout<<" ∣ 4計算教師平均年齡 ∣"<<endl;
cout<<" ∣ 5計算工人平均年齡 ∣"<<endl;
cout<<" ∣ 0返回主菜單 ∣"<<endl;
cout<<" ╰――――――――――――――――――――――――――――╯"<<endl;
cin>>select;
switch(select){
case 1:DisplayAll(TeaInfo,WorkerInfo);break;
case 2:DisTeacherByAcademy(*TeaInfo);break;
case 3:SearchByName(TeaInfo,WorkerInfo);break;
case 4:DisAvgTeacherAge(TeaInfo);break;
case 5:DisAvgWorkerAge(WorkerInfo);break;
case 6:Mainmenu();break;
default:
cout<<"回到主菜單!"<<endl;
}
}
}
void Delete(vector <Teacher> *TeaInfo,vector <Worker> *WorkerInfo) //刪除職工數據
{
system("color 05A"); //設置當前窗口的背景色和前景色
int select = -1;
while(select!=0)
{
cout<<" ╭――――――――――《刪除職工數據》――――――――――╮"<<endl;
cout<<" ∣ 請選擇操作: ∣"<<endl;
cout<<" ├――――――――――――――――――――――――――――┤"<<endl;
cout<<" ∣ 1刪除一位教師記錄 ∣"<<endl;
cout<<" ∣ 2刪除一位工人記錄 ∣"<<endl;
cout<<" ∣ 0返回主菜單 ∣"<<endl;
cout<<" ╰――――――――――――――――――――――――――――╯"<<endl;
cin>>select;
switch(select){
case 1:DelTeacher(TeaInfo);break;
case 2:DelWorker(WorkerInfo);break;
case 3:Mainmenu();break;
default:
cout<<"回到主菜單!"<<endl;
}
}
}
void MainCho(vector <Teacher> *TeaInfo,vector <Worker> *WorkerInfo)
{ //主菜單操作
int choice = -1;
while(choice!=0){
Mainmenu();
cin>>choice;
switch(choice){
case 1:Insert(TeaInfo,WorkerInfo);break;
case 2:Search(TeaInfo,WorkerInfo);break;
case 3:Delete(TeaInfo,WorkerInfo);break;
case 0:break;
default:
cout<<"操作錯誤!"<<endl;
}
}
}
void main() //主函數
{
vector <Teacher> TeaInfo; //
vector <Worker> WorkerInfo; //
vector <Teacher>::iterator pTeacher; //
vector <Worker>::iterator pWoker; //
pTeacher = TeaInfo.begin(); //
pWoker = WorkerInfo.begin(); //
MainCho(&TeaInfo,&WorkerInfo); //調用主要處理程序
WriteFile(&TeaInfo,&WorkerInfo); //存入文件操作
}
H. 軟體開發都有哪些課程
隨著IT行業的發展,軟體開發也被賦予了更多的含義,目前的細分方向也比較多,從整體上可以把軟體開發的學習過程分為以下三個部分:第一:基礎課程。基礎課程涵蓋兩個大的部分,一部分是基礎學科,重點是數學和物理,另一部分是計算機基礎課程,包括操作系統(體系結構)、計算機網路、演算法設計、數據結構、編程語言基礎、編譯原理、資料庫等內容。基礎課程對於後續的學習是比較重要的,開發人員未來的成長高度在很大程度上取決於基礎是否扎實。第二:專業方向課程。軟體開發目前可以分為Web開發、大數據開發、嵌入式開發、多媒體開發、移動互聯開發等不同的細分方向,不同的方向需要學習不同的課程。以Web開發為例,需要掌握兩個大的開發內容,一個是前端開發,另一個是後端開發。前端開發以學習Html、CSS和JavaScript為主,其中JavaScript是學習的重點。後端開發需要選擇一門編程語言(PHP、Java、Python、C#等),然後按照編程語言的技術體系進行系統的學習。目前在Web開發領域中PHP的佔比份額比較大,而Java通常是大型互聯網平台的開發方案。第三:實踐課程。學習軟體開發通常有大量的實踐課程,實踐是學習軟體開發不可或缺的組成部分。軟體開發的實踐課程通常包括課程實踐和綜合項目實踐兩個部分,通常課程實踐往往比較多,而綜合項目實踐需要在學習到一定程度(掌握編程語言和資料庫)之後才會開展。要想學好軟體開發課程,一定要重視實踐過程。I. 求數據結構課程設計。。安排教學計劃的源代碼。。
#include<string.h>
#include<ctype.h>
#include<malloc.h> // malloc()等
#include<limits.h> // INT_MAX等
#include<stdio.h> // EOF(=^Z或F6),NULL
#include<stdlib.h> // atoi()52
#include<io.h> // eof()
#include<math.h> // floor(),ceil(),abs()
#include<process.h> // exit()
#include<iostream.h> // cout,cin
// 函數結果狀態代碼
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
typedef int Status; // Status是函數的類型,其值是函數結果狀態代碼,如OK等
typedef int Boolean; // Boolean是布爾類型,其值是TRUE或FALSE
#define MAX_NAME 10
/* 頂點字元串的最大長度 */
#define MAXCLASS 100
int Z=0;
int X=0;
int xqzs,q=1,xfsx;
typedef int InfoType;
typedef char VertexType[MAX_NAME]; /* 字元串類型 */
/* 圖的鄰接表存儲表示 */
#define MAX_VERTEX_NUM 100
typedef enum{DG}GraphKind; /* {有向圖,有向網,無向圖,無向網} */
typedef struct ArcNode
{
int adjvex; /* 該弧所指向的頂點的位置 */
struct ArcNode *nextarc; /* 指向下一條弧的指針 */
InfoType *info; /* 網的權值指針) */
}ArcNode; /* 表結點 */
typedef struct
{
VertexType data; /* 頂點信息 */
ArcNode *firstarc; /* 第一個表結點的地址,指向第一條依附該頂點的弧的指針 */
}VNode,AdjList[MAX_VERTEX_NUM]; /* 頭結點 */
typedef struct
{
AdjList vertices,verticestwo;
int vexnum,arcnum; /* 圖的當前頂點數和弧數 */
int kind; /* 圖的種類標志 */
}ALGraph;
/* 圖的鄰接表存儲的基本操作 */
int LocateVex(ALGraph G,VertexType u)
{ /* 初始條件: 圖G存在,u和G中頂點有相同特徵 */
/* 操作結果: 若G中存在頂點u,則返回該頂點在圖中位置;否則返回-1*/
int i;
for(i=0;i<G.vexnum;++i)
if(strcmp(u,G.vertices[i].data)==0)
return i;
return -1;
}
Status CreateGraph(ALGraph *G)
{ /* 採用鄰接表存儲結構,構造沒有相關信息的圖G(用一個函數構造4種圖) */
int i,j,k;
VertexType va,vb;
ArcNode *p;
printf("請輸入教學計劃的課程數: ");
scanf("%d",&(*G).vexnum);
printf("請輸入拓撲排序所形成的課程先修關系的邊數:");
scanf("%d",&(*G).arcnum);
printf("請輸入%d個課程的代表值(<%d個字元):\n",(*G).vexnum,MAX_NAME);
for(i=0;i<(*G).vexnum;++i) /* 構造頂點向量 */
{ scanf("%s",(*G).vertices[i].data);
(*G).vertices[i].firstarc=NULL;
}
printf("請輸入%d個課程的學分值(<%d個字元):\n",(*G).vexnum,MAX_NAME);
for(i=0;i<(*G).vexnum;++i) /* 構造頂點向量 */
{scanf("%s",(*G).verticestwo[i].data);
}
printf("請順序輸入每條弧(邊)的弧尾和弧頭(以空格作為間隔):\n");
for(k=0;k<(*G).arcnum;++k) /* 構造表結點鏈表*/
{ scanf("%s%s",va,vb);
i=LocateVex(*G,va); /* 弧尾 */
j=LocateVex(*G,vb); /* 弧頭 */
p=(ArcNode*)malloc(sizeof(ArcNode));
p->adjvex=j;
p->info=NULL; /* 圖 */
p->nextarc=(*G).vertices[i].firstarc; /* 插在表頭 */
(*G).vertices[i].firstarc=p;
}
return OK;
}
void Display(ALGraph G)
{ /* 輸出圖的鄰接矩陣G */
int i;
ArcNode *p;
switch(G.kind)
{case DG: printf("有向圖\n");
}
printf("%d個頂點:\n",G.vexnum);
for(i=0;i<G.vexnum;++i)
printf("%s ",G.vertices[i].data);
printf("\n%d條弧(邊):\n",G.arcnum);
for(i=0;i<G.vexnum;i++)
{
p=G.vertices[i].firstarc;
while(p)
{printf("%s→%s ",G.vertices[i].data,G.vertices[p->adjvex].data);
p=p->nextarc;
}
printf("\n");
}
}
void FindInDegree(ALGraph G,int indegree[])
{ /* 求頂點的入度,演算法調用 */
int i;
ArcNode *p;
for(i=0;i<G.vexnum;i++)
indegree[i]=0; /* 賦初值 */
for(i=0;i<G.vexnum;i++)
{
p=G.vertices[i].firstarc;
while(p)
{ indegree[p->adjvex]++;
p=p->nextarc;
}
}
}
typedef int SElemType; /* 棧類型 */
/*棧的順序存儲表示 */
#define STACK_INIT_SIZE10 /* 存儲空間初始分配量 */
#define STACKINCREMENT 2 /* 存儲空間分配增量 */
typedef struct SqStack
{
SElemType *base; /* 在棧構造之前和銷毀之後,base的值為NULL */
SElemType *top; /* 棧頂指針 */
int stacksize; /* 當前已分配的存儲空間,以元素為單位 */
}SqStack; /* 順序棧 */
/* 順序棧的基本操作 */
Status InitStack(SqStack *S)
{ /* 構造一個空棧S */
(*S).base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!(*S).base)
exit(OVERFLOW); /* 存儲分配失敗 */
(*S).top=(*S).base;
(*S).stacksize=STACK_INIT_SIZE;
return OK;
}
Status StackEmpty(SqStack S)
{ /* 若棧S為空棧,則返回TRUE,否則返回FALSE */
if(S.top==S.base)
return TRUE;
else
return FALSE;
}
Status Pop(SqStack *S,SElemType *e)
{ /* 若棧不空,則刪除S的棧頂元素,用e返回其值,並返回OK;否則返回ERROR */
if((*S).top==(*S).base)
return ERROR;
*e=*--(*S).top;
return OK;
}
Status Push(SqStack *S,SElemType e)
{ /* 插入元素e為新的棧頂元素 */
if((*S).top-(*S).base>=(*S).stacksize) /* 棧滿,追加存儲空間 */
{
(*S).base=(SElemType*)realloc((*S).base,((*S).stacksize+STACKINCREMENT)*sizeof
(SElemType));
if(!(*S).base)
exit(OVERFLOW); /* 存儲分配失敗 */
(*S).top=(*S).base+(*S).stacksize;
(*S).stacksize+=STACKINCREMENT;
}
*((*S).top)++=e;
return OK;
}
typedef int pathone[MAXCLASS];
typedef int pathtwo[MAXCLASS];
Status TopologicalSort(ALGraph G)
{ /* 有向圖G採用鄰接表存儲結構。若G無迴路,則輸出G的頂點的一個拓撲序列並返回OK,*/
/* 否則返回ERROR。 */
int i,k,j=0,count,indegree[MAX_VERTEX_NUM];
SqStack S;
pathone a;
pathtwo b;
ArcNode *p;
FindInDegree(G,indegree); /* 對各頂點求入度indegree[0..vernum-1]*/
InitStack(&S); /* 初始化棧 */
for(i=0;i<G.vexnum;++i) /* 建零入度頂點棧S */
if(!indegree[i])
Push(&S,i); /* 入度為0者進棧 */
count=0; /* 對輸出頂點計數 */
while(!StackEmpty(S))
{ /* 棧不空 */
Pop(&S,&i);
a[i]=*G.vertices[i].data;
b[i]=*G.verticestwo[i].data;
printf("課程%s→學分%s ",G.vertices[i].data,G.verticestwo[i].data);
/* 輸出i號頂點並計數 */
++count;
for(p=G.vertices[i].firstarc;p;p=p->nextarc)
{ /* 對i號頂點的每個鄰接點的入度減1 */
k=p->adjvex;
if(!(--indegree[k])) /* 若入度減為0,則入棧 */
Push(&S,k);
}
}
if(count<G.vexnum)
{printf("此有向圖有迴路\n");
return ERROR;
}
else
{printf("為一個拓撲序列。\n");
}
while(q<=xqzs)
{ int C=0;
if(X<=G.arcnum)
{ while(C<=xfsx)
{C+=*G.verticestwo[Z].data;
++Z;
}
printf("第%d個學期應學課程:",q);
while(X<=Z)
{cout<<*G.vertices[X].data<<"";
++X;
}
cout<<endl;
q++;
}
else
{cout<<"課程編制已經完成!"<<endl;
return OK;
}
}
return OK;
}
void main()
{ ALGraph f;
printf("教學計劃編制問題的數據模型為拓撲排序AOV-網結構。\n");
printf("以下為教學計劃編制問題的求解過程:\n");
printf("請輸入學期總數:");
scanf("%d",&xqzs);
printf("請輸入學期的學分上限:");
scanf("%d",&xfsx);
CreateGraph(&f);
Display(f);
TopologicalSort(f);
}