高級軟體開發課程設計
1. 哪個學校的軟體開發課程設置好
選擇一所好的IT學校,應該看學校的師資力量,
IT培訓畢竟是知識含量要專求很高的培訓,屬
培訓講師水平的高低會給培訓帶來直接的影響,因此,在參加IT培訓班時,
對培訓機構的老師應重點考察老師是否具有豐富的實踐操作技能,
還要看他是否有豐富的講課經驗和水平,有的老師滿腹經綸,
但講課水平不高,這種培訓會浪費大家的時間和金錢。
2. 軟體工程課程設計
去網上搜軟體工程的畢業設計,一應俱全
3. 求軟體工程課程設計一份
圖書館管理系統 軟體工程課程設計說明書一份
《圖書管理系統》系統設計報告
一、 引言
1. 摘要:中學圖書館管理系統
目的:方便圖書館對書籍借閱的管理
主要功能: —學生基本信息查詢
—書籍借閱管理
—書籍管理
2. 背景:第十小組承擔開發任務
3. 工作條件與限制:windows操作平台,Visual Basic6.0和SQL Sserver2000等軟體為開發工具,利用上課時間和課外時間做成。由於現在圖書管理系統已經比叫完善,所以我們暫時沒有能做出比以前有先進技術的管理系統。
4. 參考和引用資料:《資料庫系統概論》,VB應用
5. 專門術語定義:
二、系統總體技術方案
1. 計算機系統配置:windows平台,VB/SqlServer2000,WINNT SERVER操作系統, SQL server2000關系資料庫管理系統 ,VB操作軟體,區域網。
2. 模塊設計:主要分為三個模塊:即學生基本信息模塊,書籍借閱模塊,書籍管理模塊
代碼設計:讀者信息查詢
Public connStr As ADODB.Connection
Private Sub Command1_Click()
End Sub
Private Sub cmdAdd_Click()
If Trim(List1.Text) <> "" Then
List2.AddItem (List1.Text)
End If
End Sub
Private Sub cmdMove_Click()
If Trim(List2.Text) <> "" Then
List2.RemoveItem (List2.ListIndex)
End If
End Sub
Private Sub cmdSearch_Click()
Dim cmdstr As String
If List2.ListCount = 0 Then
MsgBox "請選擇輸出列!", vbOKOnly, "提示"
Exit Sub
End If
cmdstr = "select "
For i = 0 To List2.ListCount - 1
If Trim(List2.List(i)) = "圖書證號" Then
cmdstr = cmdstr + "READER_DATA." + Trim(List2.List(i)) + ","
Else
If Trim(List2.List(i)) = "書號" Then
cmdstr = cmdstr + "MARC_DATA." + Trim(List2.List(i)) + ","
Else
cmdstr = cmdstr + Trim(List2.List(i)) + ","
End If
End If
Next
cmdstr = Left(cmdstr, Len(cmdstr) - 1)
If Opbook.Value = True Then
cmdstr = cmdstr + " from MARC_DATA where "
End If
If Opreader.Value = True Then
cmdstr = cmdstr + " from READER_DATA where "
End If
If Oplend.Value = True Then
cmdstr = cmdstr + " from MARC_DATA,READER_DATA,LEND_DATA " & " where MARC_DATA.書號=LEND_DATA. 書號 and " & " READER_DATA.圖書證號=LEND_DATA.圖書證號 and "
End If
If Trim(comKey.Text) = "" Then
MsgBox "請選擇查詢關鍵字!", vbOKOnly, "提示"
Exit Sub
End If
If Trim(txtKey.Text) = "" Then
MsgBox "請設置查詢關鍵字的值!", vbOKOnly, "提示"
Exit Sub
End If
If ComType.Text = "精確匹配" Then
cmdstr = cmdstr + Trim(comKey.Text) + "='" + Trim(txtKey.Text) + "'"
Else
cmdstr = cmdstr + Trim(comKey.Text) + " like '" + Trim(txtKey.Text) + "%'"
End If
Adodc1.RecordSource = cmdstr
Adodc1.Refresh
DataGrid1.Refresh
End Sub
Private Sub Form_Load()
Set connStr = New ADODB.Connection
connStr.Open "driver={SQL Server}; Server=SYSLAB000;UID=jj138;PWD=;database=計教(1)班38號"
Adodc1.ConnectionString = connStr
ComType.AddItem ("精確匹配")
ComType.AddItem ("前方一致匹配")
End Sub
Private Sub Label3_Click()
End Sub
Private Sub List2_Click()
End Sub
Private Sub Opbook_Click()
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "MARC_DATA", connStr, adOpenKeyset, adLockReadOnly, adCmdTable
comKey.Clear
List1.Clear
For i = 0 To rs.Fields.Count - 1
comKey.AddItem (rs.Fields(i).Name)
List1.AddItem (rs.Fields(i).Name)
Next
rs.Close
List2.Clear
txtKey.Text = ""
End Sub
Private Sub Oplend_Click()
comKey.Clear
List1.Clear
comKey.AddItem ("圖書證號")
comKey.AddItem ("姓名")
comKey.AddItem ("書號")
comKey.AddItem ("書名")
comKey.AddItem ("出版社")
comKey.AddItem ("借出日期")
comKey.AddItem ("還書日期")
List1.AddItem ("圖書證號")
List1.AddItem ("姓名")
List1.AddItem ("書號")
List1.AddItem ("書名")
List1.AddItem ("出版社")
List1.AddItem ("借出日期")
List1.AddItem ("還書日期")
List2.Clear
txtKey.Text = ""
End Sub
Private Sub Opreader_Click()
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "READER_DATA", connStr, adOpenKeyset, adLockReadOnly, adCmdTable
comKey.Clear
List1.Clear
For i = 0 To rs.Fields.Count - 1
comKey.AddItem (rs.Fields(i).Name)
List1.AddItem (rs.Fields(i).Name)
Next
rs.Close
List2.Clear
txtKey.Text = ""
End Sub
借還書處理
Private Sub cmdLend_Click()
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
If Trim(txtBid.Text) = "" Or Trim(txtRid_1.Text) = "" Then
MsgBox "請輸入圖書證號和書號!", vbOKOnly, "提示信息"
Else
rs.Open "LEND_DATA", connStr, adOpenKeyset, adLockOptimistic, adCmdTable
rs.AddNew
rs("書號") = txtBid.Text
rs("借出日期") = Date
rs("圖書證號") = txtRid.Text
rs.Update
Adodc1.Refresh
End If
End Sub
Private Sub cmdReturn_Click()
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
If Trim(txtBid.Text) = "" Or Trim(txtRid_1.Text) = "" Then
MsgBox "請輸入圖書證號和書號!", vbOKOnly, "提示信息"
Else
cmdstr = "update LEND_DATA set 還書日期='" _
& Date & "' where 書號='" & Trim(txtBid.Text) & "'"
rs.Open cmdstr, connStr, adOpenKeyset, adLockOptimistic, adCmdText
Adodc1.Refresh
End If
End Sub
Private Sub cmds_Click()
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
cmdstr = "select * from READER_DATA WHERE 圖書證號 ='" & Trim(txtRid_1.Text) & "'"
rs.Open cmdstr, connStr, adOpenForwardOnly, adLockReadOnly, adCmdText
If Not rs.EOF Then
txtRid.Text = rs("圖書證號")
txtName.Text = rs("姓名")
If Not IsNull(rs("性別")) Then
txtXb.Text = rs("性別")
End If
If Not IsNull(rs("系名")) Then
txtXm.Text = rs("系名")
End If
Else
MsgBox "未找到該讀者信息!", vbOKOnly, "提示信息"
End If
cmdstr = "select 借出日期,還書日期,LEND_DATA.書號,書名,作者,出版社" & " from LEND_DATA,MARC_DATA " & "where LEND_DATA.書號=MARC_DATA.書號 and " & " 還書日期 is null and 圖書證號='" & Trim(txtRid_1.Text) & "'"
Adodc1.RecordSource = cmdstr
Adodc1.Refresh
End Sub
Private Sub cmdSearch_Click()
cmdstr = "select 借出日期,還書日期,LEND_DATA.書號,書名,作者,出版社" & "from LEND_DATA,MARC_DATA " & "where LEND_DATA.書號=MARC_DATA.書號 and 圖書證號='" & Trim(txtRid_1.Text) & "'"
Adodc1.RecordSource = cmdstr
Adodc1.Refresh
End Sub
Private Sub DataGrid1_Click()
If Not Adodc1.Recordset.BOF And Not Adodc1.Recordset.BOF Then
txtBid.Text = Adodc1.Recordset("書號")
End If
End Sub
Private Sub Form_Load()
Set connStr = New ADODB.Connection
connStr.Open "driver={SQL Server}; Server=SYSLAB000;UID=jj138;PWD=;database=計教(1)班38號"
Adodc1.ConnectionString = connStr
End Sub
圖書館詳細信息
Private Sub txt_refresh()
If Not Adodc1.Recordset.EOF And Not Adodc1.Recordset.BOF Then
txtBid.Text = Adodc1.Recordset("書號")
txtBname.Text = Adodc1.Recordset("書名")
txtWrite.Text = Adodc1.Recordset("作者")
txtPublisher.Text = Adodc1.Recordset("出版社")
txtYear.Text = Adodc1.Recordset("出版時間")
txtGb.Text = Adodc1.Recordset("國別代碼")
txtDate.Text = Adodc1.Recordset("進館時間")
txtCallno.Text = Adodc1.Recordset("分類號")
End If
End Sub
Private Sub cmdDele_Click()
Dim deletxt As String
deletxt = "是否刪除圖書《" & Adodc1.Recordset("書名") & "》的記錄?"
If Not Adodc1.Recordset.EOF And Not Adodc1.Recordset.BOF Then
If MsgBox(deletxt, vbOKCancel, "提示信息") = vbOK Then
Adodc1.Recordset.Delete
Adodc1.Refresh
End If
End If
End Sub
Private Sub cmdNew_Click()
If cmdNew.Caption = "新增" Then
txt_enable (2)
cmdNew.Caption = "保存"
txtBid.Text = ""
txtBname.Text = ""
txtWrite.Text = ""
txtPublisher.Text = ""
txtYear.Text = ""
txtGb.Text = ""
txtDate.Text = ""
txtCallno.Text = ""
Else
Adodc1.Recordset.AddNew
Adodc1.Recordset("書號") = Trim(txtBid.Text)
Adodc1.Recordset("書名") = Trim(txtBname.Text)
Adodc1.Recordset("作者") = Trim(txtWrite.Text)
Adodc1.Recordset("出版社") = Trim(txtPublisher.Text)
Adodc1.Recordset("出版時間") = Trim(txtYear.Text)
Adodc1.Recordset("國別代碼") = Trim(txtGb.Text)
4
Adodc1.Recordset("進館時間") = Trim(txtDate.Text)
Adodc1.Recordset("分類號") = Trim(txtCallno.Text)
Adodc1.Recordset.UpdateBatch
Adodc1.Refresh
txt_enable (1)
cmdNew.Caption = "新增"
Adodc1.Recordset.MoveFirst
txt_refresh
End If
Private Sub cmdNext_Click()
If Not Adodc1.Recordset.EOF Then
Adodc1.Recordset.MoveNext
txt_refresh
End If
End Sub
Private Sub cmdPre_Click()
If Not Adodc1.Recordset.BOF Then
Adodc1.Recordset.MovePrevious
txt_refresh 2
End If
End Sub
Private Sub cmdUpdate_Click()
If cmdUpdate.Caption = "修改" Then
txt_enable (2)
cmdUpdate.Caption = "保存"
Else
Adodc1.Recordset("書號") = Trim(txtBid.Text)
Adodc1.Recordset("書名") = Trim(txtBname.Text)
Adodc1.Recordset("作者") = Trim(txtWrite.Text)
Adodc1.Recordset("出版社") = Trim(txtPublisher.Text)
Adodc1.Recordset("出版時間") = Trim(txtYear.Text)
Adodc1.Recordset("國別代碼") = Trim(txtGb.Text)
Adodc1.Recordset("進館時間") = Trim(txtDate.Text)
Adodc1.Recordset("分類號") = Trim(txtCallno.Text)
Adodc1.Recordset.UpdateBatch
Adodc1.Refresh
txt_enable (1)
cmdUpdate.Caption = "修改"
End If
End Sub
Private Sub Form_Load()
txt_refresh
End Sub
Private Sub Text1_Change()
End Sub
Private Sub Text8_Change()
End Sub
Private Sub txtBname_Change()
End Sub
4. 課程設計操作系統模擬軟體的設計與開發 設備驅動程序設計, 要求如下: (1) 設計Windows XP或者Linux操作系
學校教的C語言基礎,一般都是在Windows系統下的命令行界面下運行的,可以輸出一些字元,也可以輸入一些字元。因為Windows下的操作都可以通過滑鼠點擊來實現,所以就很少回去用到命令行的程序,因此Windows系統提供的命令行程序就會很少。
其實命令行程序的功能是非常強大的,LZ可以去學習使用一下Ubuntu這個操作系統,就會體會到命令行程序的強大,像VIM命令行編輯器,這個類似於記事本,當然功能超級強大,還有很多很多。
LZ說的圖形化的小程序,說的應該是Windows的窗口界面的程序,可以縮小、也可以放大,還可以拖來拖去。這個你用VB或C#來做最簡單了,直接拖放控制項,然後寫幾個事件響應函數,比如滑鼠單擊一個按鈕回去執行你自己定義的函數,這就是所謂的事件驅動機制。
如果LZ想使用C語言來編寫Windows圖形界面程序的話,就需要去學習一下WIN32 API的使用,介紹這方面內容的書已經很少了。LZ也可以去學習一下MFC,經典書籍是《MFC深入淺出》,這個需要LZ具有C++面向對象語言的基礎,也是直接拖放控制項,然後注冊事件處理函數。
另外,團IDC網上有許多產品團購,便宜有口碑
5. 高級語言程序設計課程設計——學生成績統計
這個問題我回答過,程序論文我可發給你,流程圖顯示不太清楚#include "stdio.h" #include "stdlib.h" #include "string.h" #include "conio.h" #include "mem.h" #include "ctype.h" /#include "alloc.h" #define N 3 typedef struct z1
{
char no[11];
char name[15];
int score[N];
float sum;
float average;
int order;
struct z1 *next;
}STUDENT;
STUDENT *init();
STUDENT *create();
STUDENT *delete(STUDENT *h);
void print(STUDENT *h); /* 顯示所有記錄*/
void search(STUDENT *h); /*查找*/
void save(STUDENT *h); /*保存*/
STUDENT *load(); /*讀入記錄*/
void computer(STUDENT *h); /*計算總分和均分*/
STUDENT *insert(STUDENT *h); /*插入記錄*/
void append(); /*追加記錄*/
void (); /*復制文件*/
STUDENT *sort(STUDENT *h); /*排序*/
STUDENT *index(STUDENT *h); /*索引*/
void total(STUDENT *h); /*分類合計*/
int menu_select(); /*菜單函數*/
/******主函數開始*******/
main()
{
int i;
STUDENT *head; /*鏈表定義頭指針*/
head=init(); /*初始化鏈表*/
clrscr(); /*清屏*/
for(;;) /*無限循環*/
{
switch(menu_select()) /*調用主菜單函數,返回值整數作開關語句的條件*/
{ /*值不同,執行的函數不同,break 不能省略*/
case 0:head=init();break;
case 1:head=create();break;
case 2:head=delete(head);break;
case 3:print(head);break; /*顯示全部記錄*/
case 4:search(head);break; /*查找記錄*/
case 5:save(head);break; /*保存文件*/
case 6:head=load(); break; /*讀文件*/
case 7:computer(head);break; /*計算總分和均分*/
case 8:head=insert(head); break; /*插入記錄*/
case 9:();break; /*復制文件*/
case 10:head=sort(head);break; /*排序*/
case 11:append();break; /*追加記錄*/
case 12:head=index(head);break; /*索引*/
case 13:total(head);break; /*分類合計*/
case 14:exit(0); /*如菜單返回值為14程序結束*/
}
}
}
/*菜單函數,返回值為整數*/
menu_select()
{
char *menu[]={"***************MENU***************", /*定義菜單字元串數組*/
" 0. init list", /*初始化*/
" 1. Enter list", /*輸入記錄*/
" 2. Delete a record from list", /*從表中刪除記錄*/
" 3. print list ", /*顯示單鏈表中所有記錄*/
" 4. Search record on name", /*按照姓名查找記錄*/
" 5. Save the file", /*將單鏈表中記錄保存到文件中*/
" 6. Load the file", /*從文件中讀入記錄*/
" 7. compute the score", /*計算所有學生的總分和均分*/
" 8. insert record to list ", /*插入記錄到表中*/
" 9. the file to new file", /*復制文件*/
" 10. sort to make new file", /*排序*/
" 11. append record to file", /*追加記錄到文件中*/
" 12. index on nomber", /*索引*/
" 13. total on nomber", /*分類合計*/
" 14. Quit"}; /*退出*/
char s[3]; /*以字元形式保存選擇號*/
int c,i; /*定義整形變數*/
gotoxy(1,25); /*移動游標*/
printf("press any key enter menu......\n"); /*壓任一鍵進入主菜單*/
getch(); /*輸入任一鍵*/
clrscr(); /*清屏幕*/
gotoxy(1,1); /*移動游標*/
textcolor(YELLOW); /*設置文本顯示顏色為黃色*/
textbackground(BLUE); /*設置背景顏色為藍色*/
gotoxy(10,2); /*移動游標*/
putch(0xc9); /*輸出左上角邊框┏*/
for(i=1;i<44;i++)
putch(0xcd); /*輸出上邊框水平線*/
putch(0xbb); /*輸出右上角邊框 ┓*/
for(i=3;i<20;i++)
{
gotoxy(10,i);putch(0xba); /*輸出左垂直線*/
gotoxy(54,i);putch(0xba);
} /*輸出右垂直線*/
gotoxy(10,20);putch(0xc8); /*輸出左上角邊框┗*/
for(i=1;i<44;i++)
putch(0xcd); /*輸出下邊框水平線*/
putch(0xbc); /*輸出右下角邊框┛*/
window(11,3,53,19); /* 製作顯示菜單的窗口,大小根據菜單條數設計*/
clrscr(); /*清屏*/
for(i=0;i<16;i++) /*輸出主菜單數組*/
{
gotoxy(10,i+1);
cprintf("%s",menu[i]);
}
textbackground(BLACK); /*設置背景顏色為黑色*/
window(1,1,80,25); /*恢復原窗口大小*/
gotoxy(10,21); /*移動游標*/
do{
printf("\n Enter you choice(0~14):"); /*在菜單窗口外顯示提示信息*/
scanf("%s",s); /*輸入選擇項*/
c=atoi(s); /*將輸入的字元串轉化為整形數*/
}while(c<0||c>14); /*選擇項不在0~14之間重輸*/
return c; /*返回選擇項,主程序根據該數調用相應的函數*/
}
STUDENT *init()
{
return NULL;
}
/*創建鏈表*/
STUDENT *create()
{
int i; int s;
STUDENT *h=NULL,*info; /* STUDENT指向結構體的指針*/
for(;;)
{
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申請空間*/
if(!info) /*如果指針info為空*/
{
printf("\nout of memory"); /*輸出內存溢出*/
return NULL; /*返回空指針*/
}
inputs("enter no:",info->no,11); /*輸入學號並校驗*/
if(info->no[0]=='@') break; /*如果學號首字元為@則結束輸入*/
inputs("enter name:",info->name,15); /*輸入姓名,並進行校驗*/
printf("please input %d score \n",N); /*提示開始輸入成績*/
s=0; /*計算每個學生的總分,初值為0*/
for(i=0;i<N;i++) /*N門課程循環N次*/
{
do{
printf("score%d:",i+1); /*提示輸入第幾門課程*/
scanf("%d",&info->score[i]);
if(info->score[i]>100||info->score[i]<0)
printf("bad data,repeat input\n");
}while(info->score[i]>100||info->score[i]<0);
s=s+info->score[i];
}
info->sum=s;
info->average=(float)s/N;
info->order=0;
info->next=h;
h=info; }
return(h); /*返回頭指針*/
}
/*輸入字元串,並進行長度驗證*/
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"); }while(strlen(p)>count);
strcpy(s,p); }
void print(STUDENT *h)
{
int i=0; /* 統計記錄條數*/
STUDENT *p; /*移動指針*/
clrscr(); /*清屏*/
p=h; /*初值為頭指針*/
printf("\n\n\n****************************STUDENT********************************\n");
printf("|rec|nO | name | sc1| sc2| sc3| sum | ave |order|\n");
printf("|---|----------|---------------|----|----|----|--------|-------|-----|\n");
while(p!=NULL)
{
i++;
printf("|%3d |%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", i, p->no,p->name,p->score[0],p->score[1],
p->score[2],p->sum,p->average,p->order);
p=p->next;
}
printf("**********************************end*********************************\n");
}
/*刪除記錄*/
STUDENT *delete(STUDENT *h)
{
STUDENT *p,*q; /*p為查找到要刪除的結點指針,q為其前驅指針*/
char s[11]; /*存放學號*/
clrscr(); /*清屏*/
printf("please deleted no\n"); /*顯示提示信息*/
scanf("%s",s); /*輸入要刪除記錄的學號*/
q=p=h; /*給q和p賦初值頭指針*/
while(strcmp(p->no,s)&&p!=NULL) /*當記錄的學號不是要找的,或指針不為空時*/
{
q=p; /*將p指針值賦給q作為p的前驅指針*/
p=p->next; /*將p指針指向下一條記錄*/
}
if(p==NULL) /*如果p為空,說明鏈表中沒有該結點*/
printf("\nlist no %s student\n",s);
else /*p不為空,顯示找到的記錄信息*/
{
printf("*****************************have found***************************\n");
printf("|no | name | sc1| sc2| sc3| sum | ave |order|\n");
printf("|----------|---------------|----|----|----|--------|-------|-----|\n");
printf("|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", p->no,
p->name,p->score[0],p->score[1],p->score[2],p->sum,
p->average,p->order);
printf("********************************end*******************************\n");
getch(); /*壓任一鍵後,開始刪除*/
if(p==h) /*如果p==h,說明被刪結點是頭結點*/
h=p->next; /*修改頭指針指向下一條記錄*/
else
q->next=p->next; /*不是頭指針,將p的後繼結點作為q的後繼結點*/
free(p); /*釋放p所指結點空間*/
printf("\n have deleted No %s student\n",s);
printf("Don't forget save\n");/*提示刪除後不要忘記保存文件*/
}
return(h); /*返回頭指針*/
}
/*查找記錄*/
void search(STUDENT *h)
{
STUDENT *p; char s[15]; clrscr();
printf("please enter name for search\n");
scanf("%s",s); /*輸入姓名*/
p=h; /*將頭指針賦給p*/
while(strcmp(p->name,s)&&p!=NULL) /*當記錄的姓名不是要找的,或指針不為空時*/
p=p->next; /*移動指針,指向下一結點*/
if(p==NULL) /*如果指針為空*/
printf("\nlist no %s student\n",s); /*顯示沒有該學生*/
else /*顯示找到的記錄信息*/
{
printf("\n\n*****************************havefound***************************\n");
printf("|nO | name | sc1| sc2| sc3| sum | ave |order|\n");
printf("|----------|---------------|----|----|----|--------|-------|-----|\n");
printf("|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", p->no,
p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
printf("********************************end*******************************\n");
}
}
/*插入記錄*/
STUDENT *insert(STUDENT *h)
{
STUDENT *p,*q,*info; /*p指向插入位置,q是其前驅,info指新插入記錄*/
char s[11]; /*保存插入點位置的學號*/
int s1,i;
printf("please enter location before the no\n");
scanf("%s",s); /*輸入插入點學號*/
printf("\nplease new record\n"); /*提示輸入記錄信息*/
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申請空間*/
if(!info)
{
printf("\nout of memory"); /*如沒有申請到,內存溢出*/
return NULL; /*返回空指針*/
}
inputs("enter no:",info->no,11); /*輸入學號*/
inputs("enter name:",info->name,15); /*輸入姓名*/
printf("please input %d score \n",N); /*提示輸入分數*/
s1=0; /*保存新記錄的總分,初值為0*/
for(i=0;i<N;i++) /*N門課程循環N次輸入成績*/
{
do{ /*對數據進行驗證,保證在0~100之間*/
printf("score%d:",i+1);
scanf("%d",&info->score[i]);
if(info->score[i]>100||info->score[i]<0)
printf("bad data,repeat input\n");
}while(info->score[i]>100||info->score[i]<0);
s1=s1+info->score[i]; /*計算總分*/
}
info->sum=s1; /*將總分存入新記錄中*/
info->average=(float)s1/N; /*計算均分*/
info->order=0; /*名次賦值0*/
info->next=NULL; /*設後繼指針為空*/
p=h; /*將指針賦值給p*/
q=h; /*將指針賦值給q*/
while(strcmp(p->no,s)&&p!=NULL) /*查找插入位置*/
{
q=p; /*保存指針p,作為下一個p的前驅*/
p=p->next; /*將指針p後移*/
}
if(p==NULL) /*如果p指針為空,說明沒有指定結點*/
if(p==h) /*同時p等於h,說明鏈表為空*/
h=info; /*新記錄則為頭結點*/
else
q->next=info; else
if(p==h) {
info->next=p; h=info; }
else
{
info->next=p; q->next=info;
}
printf("\n ----have inserted %s student----\n",info->name); printf("---Don't forget save---\n"); /*提示存檔*/
return(h); /*返回頭指針*/
}
/*保存數據到文件*/
void save(STUDENT *h)
{
FILE *fp; /*定義指向文件的指針*/
STUDENT *p; /* 定義移動指針*/
char outfile[10]; /*保存輸出文件名*/
printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示文件名格式信息*/
scanf("%s",outfile);
if((fp=fopen(outfile,"wb"))==NULL) /*為輸出打開一個二進制文件,如沒有則建立*/
{
printf("can not open file\n");
exit(1);
}
printf("\nSaving file......\n"); /*打開文件,提示正在保存*/
p=h; /*移動指針從頭指針開始*/
while(p!=NULL) /*如p不為空*/
{
fwrite(p,sizeof(STUDENT),1,fp);/*寫入一條記錄*/
p=p->next; /*指針後移*/
}
fclose(fp); /*關閉文件*/
printf("-----save success!!-----\n"); /*顯示保存成功*/
}
/* 從文件讀數據*/
STUDENT *load()
{
STUDENT *p,*q,*h=NULL; /*定義記錄指針變數*/
FILE *fp; /* 定義指向文件的指針*/
char infile[10]; /*保存文件名*/
printf("Enter infile name,for example c:\\f1\\te.txt:\n"); scanf("%s",infile); /*輸入文件名*/
if((fp=fopen(infile,"rb"))==NULL) /*打開一個二進制文件,為讀方式*/
{
printf("can not open file\n"); /*如不能打開,則結束程序*/
exit(1);
}
printf("\n -----Loading file!-----\n");
p=(STUDENT *)malloc(sizeof(STUDENT)); /*申請空間*/
if(!p)
{
printf("out of memory!\n"); /*如沒有申請到,則內存溢出*/
return h; /*返回空頭指針*/
}
h=p; /*申請到空間,將其作為頭指針*/
while(!feof(fp)) /*循環讀數據直到文件尾結束*/
{
if(1!=fread(p,sizeof(STUDENT),1,fp))
break; /*如果沒讀到數據,跳出循環*/
p->next=(STUDENT *)malloc(sizeof(STUDENT)); /*為下一個結點申請空間*/
if(!p->next)
{
printf("out of memory!\n"); return h;
}
q=p; p=p->next; }
q->next=NULL; /*最後一個結點的後繼指針為空*/
fclose(fp); /*關閉文件*/
printf("---You have success read data from file!!!---\n");
return h; /*返回頭指針*/
}
/*追加記錄到文件*/
void append()
{
FILE *fp; /*定義指向文件的指針*/
STUDENT *info; /*新記錄指針*/
int s1,i;
char infile[10]; /*保存文件名*/
printf("\nplease new record\n");
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申請空間*/
if(!info)
{
printf("\nout of memory"); /*沒有申請到,內存溢出本函數結束*/
return ;
}
inputs("enter no:",info->no,11); /*調用inputs輸入學號*/
inputs("enter name:",info->name,15); /*調用inputs輸入姓名*/
printf("please input %d score \n",N); /*提示輸入成績*/
s1=0;
for(i=0;i<N;i++)
{
do{
printf("score%d:",i+1);
scanf("%d",&info->score[i]); /*輸入成績*/
if(info->score[i]>100||info->score[i]<0)printf("bad data,repeat input\n");
}while(info->score[i]>100||info->score[i]<0); /*成績數據驗證*/
s1=s1+info->score[i]; /*求總分*/
}
info->sum=s1; /*保存總分*/
info->average=(float)s1/N; /*求均分*/
info->order=0; /*名次初始值為0*/
info->next=NULL; /*將新記錄後繼指針賦值為空*/
printf("Enter infile name,for example c:\\f1\\te.txt:\n"); scanf("%s",infile); /*輸入文件名*/
if((fp=fopen(infile,"ab"))==NULL) /*向二進制文件尾增加數據方式打開文件*/
{
printf("can not open file\n"); /*顯示不能打開*/
exit(1); /*退出程序*/
}
printf("\n -----Appending record!-----\n");
if(1!=fwrite(info,sizeof(STUDENT),1,fp)) /*寫文件操作*/
{
printf("-----file write error!-----\n");
return; /*返回*/
}
printf("-----append sucess!!----\n");
fclose(fp); /*關閉文件*/
}
/*文件拷貝*/
void ()
{
char outfile[10],infile[10];
FILE *sfp,*tfp; /*源和目標文件指針*/
STUDENT *p=NULL; /*移動指針*/
clrscr(); /*清屏*/
printf("Enter infile name,for example c:\\f1\\te.txt:\n");
scanf("%s",infile); /*輸入源文件名*/
if((sfp=fopen(infile,"rb"))==NULL) /*二進制讀方式打開源文件*/
{
printf("can not open input file\n");
exit(0);
}
printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示輸入目標文件名*/
scanf("%s",outfile); /*輸入目標文件名*/
if((tfp=fopen(outfile,"wb"))==NULL) /*二進制寫方式打開目標文件*/
{
printf("can not open output file \n");
exit(0);
}
while(!feof(sfp)) /*讀文件直到文件尾*/
{
if(1!=fread(p,sizeof(STUDENT),1,sfp))
break; /*塊讀*/
fwrite(p,sizeof(STUDENT),1,tfp); /*塊寫*/
}
fclose(sfp); /*關閉源文件*/
fclose(tfp); /*關閉目標文件*/
printf("you have success file!!!\n"); /*顯示成功拷貝*/
}
/*排序*/
STUDENT *sort(STUDENT *h)
{
int i=0; /*保存名次*/
STUDENT *p,*q,*t,*h1; /*定義臨時指針*/
h1=h->next; /*將原表的頭指針所指的下一個結點作頭指針*/
h->next=NULL; /*第一個結點為新表的頭結點*/
while(h1!=NULL) /*當原表不為空時,進行排序*/
{
t=h1; /*取原表的頭結點*/
h1=h1->next; /*原表頭結點指針後移*/
p=h; /*設定移動指針p,從頭指針開始*/
q=h; /*設定移動指針q做為p的前驅,初值為頭指針*/
while(t->sum<p->sum&&p!=NULL) /*作總分比較*/
{
q=p; /*待排序點值小,則新表指針後移*/
p=p->next;
}
if(p==q) /*p==q,說明待排序點值大,應排在首位*/
{
t->next=p; /*待排序點的後繼為p*/
h=t; /*新頭結點為待排序點*/
}
else /*待排序點應插入在中間某個位置q和p之間,如p為空則是尾部*/
{
t->next=p; /*t的後繼是p*/
q->next=t; /*q的後繼是t*/
}
}
p=h; /*已排好序的頭指針賦給p,准備填寫名次*/
while(p!=NULL) /*當p不為空時,進行下列操作*/
{
i++; /*結點序號*/
p->order=i; /*將名次賦值*/
p=p->next; /*指針後移*/
}
printf("sort sucess!!!\n"); /*排序成功*/
return h; /*返回頭指針*/
}
/*計算總分和均值*/
void computer(STUDENT *h)
{
STUDENT *p; /*定義移動指針*/
int i=0; /*保存記錄條數初值為0*/
long s=0; /*總分初值為0*/
float average=0; /*均分初值為0*/
p=h; /*從頭指針開始*/
while(p!=NULL) /*當p不為空時處理*/
{
s+=p->sum; /*累加總分*/
i++; /*統計記錄條數*/
p=p->next; /*指針後移*/
}
average=(float)s/i;/* 求均分,均分為浮點數,總分為整數,所以做類型轉換*/
printf("\n--All students sum score is:%ld average is %5.2f\n",s,average);
}
/*索引*/
STUDENT *index(STUDENT *h)
{
STUDENT *p,*q,*t,*h1; /*定義臨時指針*/
h1=h->next; /*將原表的頭指針所指的下一個結點作頭指針*/
h->next=NULL; /*第一個結點為新表的頭結點*/
while(h1!=NULL) /*當原表不為空時,進行排序*/
{
t=h1; /*取原表的頭結點*/
h1=h1->next; /*原表頭結點指針後移*/
p=h; /*設定移動指針p,從頭指針開始*/
q=h; /*設定移動指針q做為p的前驅,初值為頭指針*/
while(strcmp(t->no,p->no)>0&&p!=NULL) /*作學號比較*/
{
q=p; p=p->next;
}
if(p==q) /*p==q, {
t->next=p; h=t; }
else {
t->next=p; /*t的後繼是p*/
q->next=t; /*q的後繼是t*/
}
}
printf("index sucess!!!\n"); /*索引排序成功*/
return h; /*返回頭指針*/
}
/*分類合計*/
void total(STUDENT *h)
{
STUDENT *p,*q; /*定義臨時指針變數*/
char sno[9],qno[9],*ptr; /*保存班級號的*/
float s1,ave; /*保存總分和均分*/
int i; clrscr(); /*清屏*/
printf("\n\n *******************Total*****************\n");
printf("---class---------sum--------------average----\n");
p=h; while(p!=NULL)
{
memcpy(sno,p->no,8); /*從學號中取出班級號*/
sno[8]='\0'; /*做字元串結束標記*/
q=p->next; /*將指針指向待比較的記錄*/
s1=p->sum; /*當前班級的總分初值為該班級的第一條記錄總分*/
ave=p->average; /*當前班級的均分初值為該班級的第一條記錄均分*/
i=1; /*統計當前班級人數*/
while(q!=NULL) /*內循環開始*/
{
memcpy(qno,q->no,8); /*讀取班級號*/
qno[8]='\0'; /*做字元串結束標記*/
if(strcmp(qno,sno)==0) /*比較班級號*/
{
s1+=q->sum; /*累加總分*/
ave+=q->average; /*累加均分*/
i++; /*累加班級人數*/
q=q->next; /*指針指向下一條記錄*/
}
else
break; }
printf("%s %10.2f %5.2f\n",sno,s1,ave/i);
if(q==NULL)
break; else
p=q; }
printf("---------------------------------------------\n");
}
6. 《軟體工程》課程設計作業
沒猜錯的化你是想找一份完整的《軟體設計開發文檔》,最主要的是得做過項目,有實踐經驗的才能寫出合格的文檔,如果有難題可以私我