學生成績管理系統軟體測試實驗報告
1. 求c++程序 學生成績管理系統 詳細的實驗報告
#include<iostream>
#include<string>
#include <fstream>
#include<sstream>
#include<iomanip>
#include <stdlib.h>
using namespace std;
//結點類,用於存放學生的各種數據
class Node{
public:
int id;
//學號
string name;
//姓名
string grade;
//等級
double english;
//英語
double math;
//數學
double c;
//C++
double sum;
//總分
double average;
Node *next;
//指向下一結點的指針
Node(int nid=0,string nname="noname",
//構造函數,初始化變數
double e=0,double m=0,double cl=0,double s=0 ,double a=0,string g="ng");
};
Node::Node(int nid,string nname,double e,double m,double cl,double s,double a,string g)
{
id=nid;
name=nname;
next=NULL;
english=e;
math=m;c=cl;
sum=s;
average=a;
grade=g;
}
//class NOde結束//Link類,把數據以鏈表的形式存儲,鏈表的每個結點為一個Node對象
class Link{
private:
Node *head;
//鏈表的頭指針,為Node對象類型的指
public :
Link();//構造函數,初始化變數
bool linkIsEmpty();//判斷鏈表是否為空
void linkInsert(Node *newnode);//向鏈表中插入新的結點
bool linkDelete(int nid);//從鏈表中刪除的結點
void linkClear();//清空鏈表中數據
void linkView();//查看鏈表中數據
void linkGrade(Node *p1);//計算等級
void linkAverageTotle();//按平均分統計
Node* linkFind(int nid);//在鏈表中查找id為nid結點,返回指向該結點的指針
Node* getHead();//獲取頭指針
};
Link::Link()
{ //構造函數,初始化鏈表為空
head=NULL;
}
bool Link::linkIsEmpty()
{ //判斷鏈表是否為空,空則返回
true; return(head==NULL);
}
void Link::linkInsert(Node *newnode)
{//按id值從小到大的順序,插入新的結點
Node *p1;if(!head)//鏈表為空的情況
head=newnode;else if((head->id)>(newnode->id))
{//插入到第一個結點的情況
newnode->next=head;
head=newnode;
}
else
{//插入到第二個及以後情況
p1=head;
while(1)
{if(!(p1->next))
{p1->next=newnode;break;}
else if((p1->next)->id>newnode->id)
{newnode->next=p1->next;p1->next=newnode;break;}
p1=p1->next;}
}
}
bool
Link::linkDelete(int nid)
{//刪除結點,成功則返回
true; Node *p;
if(head==NULL)
//鏈表為空的情況
return false;
if(head->id==nid)
{//刪除的為第一個結點的情況
head=head->next;
return true;
}p=head;
while(p->next)
{//刪除的為第二個及以後結點的情況
if((p->next)->id==nid)
{p->next=(p->next)->next;
return true;
}
p=p->next;
}
return false;
}
void Link::linkClear()
{//清空鏈表
head=NULL;
}
void Link::linkView()
{//顯示鏈表數據
Node *p=head;
cout<<setw(10)<<"學號"<<setw(8)<<"姓名"<<setw(8)<<"英語"<<setw(8)<<"數學"<<setw(8)<<"C++"<<setw(8)<<"總分"<<setw(8)<<"平均分"<<setw(8)<<"等級"<<endl;while(p){ (p->sum)=(p->english)+(p->math)+(p->c);
//計算總分
(p->average)=((p->english)+(p->math)+(p->c))/3;
//計算平均成績
linkGrade(p);
//計算等級
cout<<setw(10)<<p->id<<setw(8)<<p->name<<setw(8)<<p->english<<setw(8)<<p->math<<setw(8)<<p->c<<setw(8)<<p->sum<<setw(8)<<p->average<<setw(8)<<p->grade<<endl; p=p->next;}}void Link::linkGrade(Node *p1)
{
// 計算等級
while(p1){
if(p1->average>=90&&p1->average<=100)
p1->grade="優";
else if(p1->average>=80&&p1->average<90)
p1->grade="良好";
else if(p1->average>=70&&p1->average<80)
p1->grade="中等";
else if(p1->average>=60&&p1->average<=70)
p1->grade="合格";
else
p1->grade="不合格";p1=p1->next;
}
}
void Link::linkAverageTotle()
{//按學生平均分統計
int a=0,b=0,c=0,d=0,e=0,f=0;
double averagesum=0,asum=0,aaverage=0,paverage=0;
Node *p3=head;
while(p3)
{
if(p3->average>=90&&p3->average<=100) a+=1;
else if(p3->average>=80&&p3->average<90)b+=1;
else if(p3->average>=70&&p3->average<80) c+=1;
else if(p3->average>=60&&p3->average<70) d+=1;
else e+=1;
asum+=p3->sum;
aaverage+=p3->average;p3=p3->next;
}
f=a+b+c+d+e;
averagesum=asum/f;
paverage=aaverage/f;
cout<<"|-------------------------------------------------------|"<<endl;
cout<<"| 總 人 數:"<<f<<endl;
cout<<"|-------------------------------------------------------|"<<endl;
cout<<"| 優 人 數:"<<a<<" | "<<"優 秀 率: "<<a*100/f<<"%"<<endl;
cout<<"|-------------------------------------------------------|"<<endl;
cout<<"| 良 好 的人數:"<<b<<" | "<<"良 好 率: "<<b*100/f<<"%"<<endl;
cout<<"|-------------------------------------------------------|"<<endl;
cout<<"| 中 等 的人數:"<<c<<" | "<<"中 等 率: "<<c*100/f<<"%"<<endl;
cout<<"|-------------------------------------------------------|"<<endl;
cout<<"| 所有合格人數:"<<a+b+c+d<<" | "<<"合 格 率: "<<(a+b+c+d)*100/f<<"%"<<endl;
cout<<"|-------------------------------------------------------|"<<endl;
cout<<"| 不 合 格 數:"<<e<<" | "<<"不合格率: "<<e*100/f<<"%"<<endl;
cout<<"|-------------------------------------------------------|"<<endl;
cout<<"| 總分的平均分:"<<averagesum<<" | "<<"所有科目的平均分:"<<paverage<<endl;
cout<<"|-------------------------------------------------------|"<<endl;
}
Node* Link::linkFind(int nid)
{//查找id值為nid的結點,返回該結點的指針
Node *p=head;
//沒找到符合條件的結點的話,返回的指針值為
NULL; while(p)
{if(p->id==nid)break;
else
p=p->next;
}return p;
}
Node* Link::getHead()
{return head;}
//class Link 結束
//類Student,用於包裝Link類及菜單操作
class Student
{
private:
Link slink;
//Link對象成員
bool k;
//記錄數據是否被修改
public:
Student();
void studentClear();
void studentInsert();
void studentDelete();
void studentFind();
void studentView();
void studentLoad();
void studentSave();
void studentAverageTotle();
//按平均分數統計等級
void Exit();
//退出程序
void showMenu();
//顯示菜單
void showTip();
//顯示操作提示
void doMenu(char n);
//執行相應菜單項功能
};
Student::Student()
{
Link();
//調用成員對象的構造函數
studentLoad();
//從文件中讀取數據,創建鏈表
k=false;
//設置數據被修改
}
void Student::studentClear()
{
//清空學生記錄
slink.linkClear();
cout<<"成功清空學生記錄!"<<endl;
}
void Student::studentInsert()
{
//插入學生記錄
Node *p=new Node();
cout<<"請輸入學號:";
cin>>p->id;
cout<<"請輸入姓名:";
cin>>p->name;
if(!slink.linkFind(p->id))
{
//判斷學號是否存在
slink.linkInsert(p);
k=true;
}
else
cout<<"學號為"<<p->id<<"的學生已存在,插入失敗!";
cout<<"請輸入成績:"<<endl;
cout<<"英語:"; cin>>p->english;
cout<<endl; cout<<"數學:";
cin>>p->math;
cout<<endl;
cout<<"C++:";
cin>>p->c;
cout<<endl;
(p->sum)=(p->english)+(p->math)+(p->c);
//計算總分
(p->average)=((p->english)+(p->math)+(p->c))/3;
//計算平均成績
}
void Student::studentDelete()
{
//刪除學生記錄
int i;
if(slink.linkIsEmpty())
//鏈表為空的情況
cout<<"沒有學生記錄!"<<endl;
else{
cout<<"請輸入學號:";
cin>>i;
if(slink.linkDelete(i))
{
cout<<"成功刪除學號為"<<i<<"的學生記錄!"<<endl;
k=true;
}
else
cout<<"沒有找到學號為"<<i<<"的學生!"<<endl;
}
}
void Student::studentFind()
{
//查找某學號的學生記錄
int n;
Node *p;if(slink.linkIsEmpty())
//鏈表為空的情況
cout<<"沒有學生記錄!"<<endl;
else{cout<<"請輸入要查找的學號:";
cin>>n;p=slink.linkFind(n);
//獲得找到的結點的指針
if(p)
{
//指針值不為NULL時
(p->sum)=(p->english)+(p->math)+(p->c);
//計算總分
(p->average)=((p->english)+(p->math)+(p->c))/3;
//計算平均成績
slink.linkGrade(p);
cout<<setw(6)<<"學號"<<setw(8)<<"姓名"<<setw(8)<<"英語"<<setw(8)<<"數學"<<setw(8)<<"C++"<<setw(8)<<"總分"<<setw(8)<<"平均分"<<setw(8)<<"等級"<<endl;
cout<<setw(6)<<p->id<<setw(8)<<p->name<<setw(8)<<p->english<<setw(8)<<p->math<<setw(8)<<p->c<<setw(8)<<p->sum<<setw(8)<<p->average<<setw(8)<<p->grade<<endl;
}
else
//指針值為NULL時
cout<<"沒有找到學號為"<<n<<"的學生記錄!"<<endl;
}
}
void Student::studentView()
{
//顯示所有學生的記錄
if(slink.linkIsEmpty())
cout<<"沒有學生記錄!"<<endl;
else
slink.linkView();
}
void Student::studentLoad()
{//從文件中讀入數據,創建鏈表
Node *p;int nid;
ifstream infile("data.txt");
if(!infile)cerr<<"錯誤:數據文件不能打開!\n";
else while(infile>>nid)
{
//讀取學號,直到讀空
p=new Node();
p->id=nid;
infile>>p->name>>p->english>>p->math>>p->c>>p->sum>>p->average>>p->grade;
//讀取姓名
slink.linkInsert(p);
}
infile.close();
//關閉文件
}
void Student::studentSave()
{
//將數據保存到文件
Node *p=slink.getHead();
ofstream outfile("data.txt");
if(!outfile)cerr<<"錯誤:數據文件不能打開!\n";
else
{
while(p)
{
outfile<<p->id<<' '<<p->name<<' '<<p->english<<' '<<p->math<<' '<<p->c<<' '<<p->sum<<' '<<p->average<<' '<<p->grade<<endl;
p=p->next;
}
k=false;
cout<<"保存成功!"<<endl;
}
}
void Student::studentAverageTotle()
{
if(slink.linkIsEmpty());//執行語句;
else
slink.linkAverageTotle();
}
void Student::Exit()
{
char s='Y';
if(k){
//判斷數據是否修改
cout<<"數據已經改變,是否保存?(y/n):";
cin>>s;if(s=='y'||s=='Y')studentSave();
}
cout<<"已安全退出,";
system("pause");
exit(0);
}
void Student::showMenu()
{
cout<<" "<<"|------------------------------------------------|"<<endl;
cout<<" "<<"| 學生信息管理系統 |"<<endl;
cout<<" "<<"|------------------------------------------------|"<<endl;
cout<<" "<<"| 1. 清空:清除所有學生數據 |"<<endl;
cout<<" "<<"|------------------------------------------------|"<<endl;
cout<<" "<<"| 2. 添加:插入一條學生數據 |"<<endl;
cout<<" "<<"|------------------------------------------------|"<<endl;
cout<<" "<<"| 3. 刪除:刪除指定學生數據 |"<<endl;
cout<<" "<<"|------------------------------------------------|"<<endl;
cout<<" "<<"| 4. 查找:查找指定學生數據 |"<<endl;
cout<<" "<<"|------------------------------------------------|"<<endl;
cout<<" "<<"| 5. 顯示:顯示所有學生數據 |"<<endl;
cout<<" "<<"|------------------------------------------------|"<<endl;
cout<<" "<<"| 6. 保存:保存所有學生數據 |"<<endl;
cout<<" "<<"|------------------------------------------------|"<<endl;
cout<<" "<<"| 7. 統計:按學生平均分統計 |"<<endl;
cout<<" "<<"|------------------------------------------------|"<<endl;
cout<<" "<<"| 0. 退出:安全的退出本系統 |"<<endl;
cout<<" "<<"|------------------------------------------------|"<<endl<<endl;
}
void Student::showTip()
{
cout<<endl;
cout<<"-------------------操作完成---------------------"<<endl;
cout<<"-----------------選擇0-7繼續-------------------"<<endl;
cout<<"請選擇:";
}
void Student::doMenu(char n)
{
switch(n)
{
case '1':studentClear();break;
case '2':studentInsert();break;
case '4':studentFind();break;
case '3':studentDelete();break;
case '5':studentView();break;
case '6':studentSave();break;
case '7':studentAverageTotle();break;
case '0':Exit();break;
default:cout<<"輸入錯誤!";
}
}
int main()
{
Student s;
char i='9';
s.showMenu();
cout<<"選擇對應數字進行操作:";
while(1)
{cin>>i;
system("cls");
//清除屏幕
s.showMenu();
s.doMenu(i);
s.showTip();
}
return 0;
}
希望能對你有幫助
2. 大一計算機實驗報告學生成績表的製作與管理
計算機基礎實驗報告填寫內容
實驗項目名稱:指法練習
實驗目的:1.認識微機主要部件;2.鍵盤分布及功能;3.鍵盤指法練習,漢字輸入;
實驗內容:1.觀察計算機組成結構 ;2.開關計算機的正確方法;3.指法和指法基礎鍵位練習
微機主要部件:
……………
2.系統啟動和關閉過程:
·啟動Windows
打開主機和顯示器電源開關,屏幕顯示啟動過程中的畫面(滑鼠指針呈沙漏形狀),屏幕上出現Windows的桌面, 且滑鼠呈指針形狀,表示系統啟動完成。
·關閉Windows
單擊屏幕左下角的開始,打開開始菜單,單擊菜單中的關閉系統,打開關閉Windows對話框,選擇關閉系統即可。
3. 鍵盤結構:
計算機鍵盤主要由主鍵盤區、小鍵盤區和功能鍵組構成。主鍵盤即通常的英文打字機用鍵(鍵盤中部);小鍵盤即數字鍵組(鍵盤右則與計算器類似);功能鍵組(鍵盤上部F1—F12)。…………
4.常用鍵的鍵名、鍵符及功能:
…………
5.正確的鍵盤操作方法
① 正確的姿式:
…………
② 正確的鍵入指法:
…………
6.指法練習操作:(提示:TT的進入,退出,選擇,練習)
…………
7漢字輸入方式:
…………
8.實驗小結:
…………
實驗項目名稱:操作系統初步
實驗目的:1.了解DOS及常用命令的使用;2. 熟悉WINDOWS操作系統界面;3.掌握WINDOWS相關基本操作。
實驗內容:WINDOWS系統的基本操作和常用DOS命令的使用
(關鍵要寫操作步驟 ,而不是羅列知識點)
一、WINDOWS系統的基本操作
Windows 的桌面組成
桌面的基本元素,例如桌面圖標、任務欄、開始按鈕等,以及窗口的基本元素,例如:菜單、工具欄、標題、控制按鈕等。……………
2. 滑鼠的基本操作:
……………
3. Windows窗口的基本操作
(1) 窗口的移動
………..
(2) 改變窗口的大小
…………….
(3) 窗口的最小化、最大化、還原及關閉
……………………
4.Windows 的菜單操作
…………….
5. 啟動程序的幾種方法
…………….
6. 資源管理器的使用
1)查看盤中文件夾的分層結構
…………….
2)創建文件夾
……………
3)選定文件或文件夾
…………….
4)刪除文件或文件夾
……………
5)復制文件或文件夾
……………
6)移動文件或文件夾
……………
7)更改文件或文件夾的名稱
……………
7.「回收站」的使用
……………
二、常用DOS命令的使用
1.當前驅動器的選擇
……………
2.COPY命令的使用
……………
3.REN命令的使用
……………
4.TYPE命令的使用
……………
5.DEL命令的使用
……………
6.DIR命令的使用
……………
7.MD命令的使用
……………
8. CD命令的使用
……………
9. RD命令 的使用
……………
10. XCOPY命令的使用?
……………
三.實驗小結:
……………
實驗項目名稱:WORD
實驗目的:1.熟悉WORD字處理界面; 2.WORD的編輯操作; 3. WORD的綜合應用
實驗內容:1. Word的基本操作 ;2. Word文檔的排版和頁面設置;3. 表格、圖形的處理
(實驗報告包含下面5大內容但不要原樣照抄,寫出操作步驟)
Word的基本操作
1.Word 2000的啟動和退出
2.創建一個新文檔?
3.打開並編輯一個已有的Word文檔?
4.字元和漢字的輸入?
5.文檔的編輯?
(1)建立一個新文檔?
(2)插入文字
(3)插入符號和特殊字元?
(4)選擇和刪除文本?
(5)改寫文本?
(6)查找與替換?
(7)復制文本?
(8)移動文本?
6.檢查和更正拼寫及語法錯誤?
(1)輸入時自動檢查拼寫和語法錯誤?
(2)更正拼寫和語法錯誤?
2.Word文檔的排版和頁面設置
1.字元格式的設置?
(1)設置或改變字元的字體 ?
(2)設置或改變字型大小?
(3)設置不同的字形?
(4)更改字元的顏色
2.段落格式的設置?
(1)設置段落縮進量?
(2)調整段落間距?
(3)更改文本對齊方式?
3.添加和修改邊框及底紋?
4.頁面編排以及頁面設置的基本方法?
(1)創建頁眉或頁腳
(2)刪除頁眉或頁腳
(3)添加、移動或刪除分頁符
(4)設置頁碼
(5)為Word文檔添加背景色或紋理
(6)插入分節符
(7)改變分節符類型
(8)更改文字的垂直對齊方式
(9)分欄
(10)頁面設置?
5.Word文檔的保護、格式轉換以及文件查找方法
(1)使用文檔的保護
(2)格式轉換
(3)文件的查找方法
3.表格的處理
1.表格的創建和刪除?
(1)表格的創建?
① 規則表格的創建?
② 復雜表格的創建?
(2)表格的刪除?
(3)文本與表格之間的轉換
2.表格的修改?
(1)插入和刪除行或列?
(2)插入和刪除單元格
(3)表格屬性
(4)合並單元格
(5)拆分單元格
3.表格格式的設置
(1)自動設置表格格式
(2)給表格、段落或選定的文本添加邊框
(3)改變表格單元格中文本的垂直對齊方式
4.利用公式進行表格的計算
(1)計算行或列數值的總和
(2)按表格中的公式進行計算
5.表格的排序
6.添加或修改底紋或填充色?
? (1)為表格添加底紋
(2)修改表格的底紋
(3)取消表格或文本的底紋
4.圖形的處理
1.添加圖形對象、改變圖形對象的大小以及刪除圖形對象
(1)添加圖形對象
① 添加自選圖形
② 將文字插入到自選圖形中
③ 添加曲線
④ 添加或取消箭頭
⑤ 增加特殊文字效果
(2)改變圖形對象的大小
① 調整圖形對象的大小
② 按指定比例調整圖形對象的大小
(3)刪除圖形對象
2.圖形的插入、編輯和處理方法
(1)圖形的插入
(2)編輯圖片
3.文本框和圖文框的使用
(1)文本框與圖文框
(2)插入文本框
(3)設置文本框的大小
(4)使文字環繞文本框或圖形對象
3. 實驗一 學生成績管理系統
我這里有個現成的,你改改就好了
4. 求高手給一份有關學生成績管理系統的軟體測試的報告
TestCenter是一款功能強大的測試管理工具,它實現了:測試需求管理、測試用例專管理、測試業務組屬件管理、測試計劃管理、測試執行、測試結果日誌察看、測試結果分析、缺陷管理,並且支持測試需求和測試用例之間的關聯關系,可以通過測試需求索引測試用例。
自動生成包括測試計劃、測試過程、缺陷報告、測試用例、測試內容。
5. 求一份學生管理系統的實驗報告 軟體體系結構
可以通過網路Hi通知我
有時間可以解決你的問題
相近的要求也可以通知我
ES:\\
6. 如何測試一個學生管理系統——寫測試用例·
學生管理系統
詳細設計說明書
編寫說明
標題:詳細設計說明書
類別:文檔
密級:內部
編輯軟體:Microsoft Word 2000 中文版
版本歷史:
版本 作者 日期 備注
V1.01 2002/09/08 詳細設計說明書
V1.0.2 2003/08/30 詳細設計說明書
編寫目的:
本文檔詳細描述組成系統的各個軟體組成部分,包括每個軟體模塊(或類)的屬性、方法、事件,各軟體模塊的外部介面說明,測試要點等內容。
本文檔由項目組維護,供項目組使用。
第1章 引言
1.1. 項目說明
項目名稱:樂山師范學院學生管理系統。
項目提出單位:樂山師范學院計算機科學系
項目開發者:樂山師范學院計算機科學系Attract工作室
項目使用部門:樂山師范學院各系科(學院)
項目建設單位:樂山師范學院計算機科學系
1.2. 項目定義
系科綜合管理信息系統是為了適應現代化學校管理的需要,加快推進我校數字化校園建設、充分利用校園網,利用網路、多媒體等計算機應用技術和手段,提高辦公效率、改善質量的高效管理信息系統。
學生管理系統是系科綜合管理信息系統的重要組成部分。
1.3. 編寫目的
本文檔為「樂山師范學院系科綜合管理信息系統(學生管理系統)詳細設計說明書」,主要用於為實現系統的功能而進行的系統詳細設計說明,詳細系統各軟體組成模塊的實現流程、功能、介面、編譯、測試要點等內容,便於對系統的編碼進行指導和約束。本文檔供項目組全體成員及項目組領導,單元測試人員閱讀。
1.4. 參考資料
《學生管理系統_系統軟體需求說明書》。
《學生管理系統_系統概要設計說明書》。
《學生管理系統_資料庫設計說明書(資料庫字典)》。
第3章 系統功能實現
從前面需求分析可以看出,系統功能龐雜,主要分為前台瀏覽器(B/S)信息發布和數據查詢,後台(C/S)數據管理和處理,學生管理功能部分數據分為5類:新生相關;在校生相關;組織社團相關;畢業生相關;學生成績綜合查詢相關。從使用和操作的功能上分,有三種用戶:普通客戶(瀏覽器瀏覽、查詢);業務數據管理人員(學生工作輔導員、教務幹事);系統管理員。為便於整個系統組織管理,把各個相對獨立的數據或功能組織到整個大系統中來,我們把各個相對獨立的功能完全獨立設計,編譯成獨立的目標(功能)模塊(single Executable),各功能模塊最後被集成到一個稱為虛擬桌面的控制台模塊中。相應地將系統結構分為一個控制台程序和五個子系統,各子系統又分為若干各子模塊。對應於每一個模塊,幾乎都有錄入、查詢、修改、刪除、查看詳細資料這幾個功能。整個業務流程就是由這幾種基本功能實現的。在這里每個模塊都要用到的功能沒必要在每個子模塊里重復闡述,在每個子模塊里只列出區別於其它子模塊的功能實現。
3.1. 系統控制台模塊
功能:
各子功能模塊的組織和調用;
統一的登陸界面實現到資料庫伺服器的登陸;
顯示系科主頁Web的首頁(主要是系科重要通知、消息等);學院通知頁面;系科每周工作安排。
系統圖標。
設計:
1. 登陸資料庫:
輸入資料庫伺服器名(ServerIP)、用戶賬號()UserID、密碼(PassWord);以賬號DEP_Computer0、密碼DEP_Computer0登陸資料庫伺服器,檢索系統許可權表,根據許可權設置相應功能模塊:
①無此用戶或禁止許可權
Enable := False;
②瀏覽許可權
Enable := True;
修改 UserID := Dep_Computer1;
修改 PassWord := 1111111111111;
③修改許可權
Enable := True;
修改 UserID := Dep_Computer2;
修改 PassWord := 222222222222;
2. 採用Win31下程序組、程序項的原理組織各執行模塊:
登陸伺服器
新生錄取數據、入學報道管理
學生信息(在校)管理
學生社團管理
畢業生信息管理
學生成績綜合查詢與統計
各程序組、程序項的顯示分別可以是分層/樹狀/大圖標/小圖標等方式;各程序項或菜單項的名稱命名為相應功能模塊的目標代碼文件名。
3.可執行功能模塊的調用執行:通過程序項或菜單項名稱獲取可執行目標代碼文件名,應用API函數CreateProcess開始執行。
7. 學生成績管理系統c語言實驗報告
這個學生成績管理系統實現了哪些功能
有程序嗎 有的話 發給我 我按程序寫報告
如果沒有我就先寫程序
look my name and jia me
8. 求一份學生成績管理系統實驗報告
C語言課程設計任務書
一、題目: 學生成績管理
二、目的與要求
1. 目的:
(1)基本掌握面向過程程序設計的基本思路和方法;
(2)達到熟練掌握C語言的基本知識和技能;
(3)能夠利用所學的基本知識和技能,解決簡單的程序設計問題
2. 要求
基本要求:
1. 要求利用C語言面向過程的編程思想來完成系統的設計;
2. 突出C語言的函數特徵,以多個函數實現每一個子功能;
3. 畫出功能模塊圖;
4. 進行簡單界面設計,能夠實現友好的交互;
5. 具有清晰的程序流程圖和數據結構的詳細定義;
6. 熟練掌握C語言對文件的各種操作。
創新要求:
在基本要求達到後,可進行創新設計,如系統用戶功能控制,對管理員級和一般級別的用戶系統功能操作不同
三、信息描述
輸入一個班10個學生的學號和每個學生考試三門功課(數學、英語、計算機基礎)的成績。編程計算出每個學生的總分和平均分,並按學生成績優劣排序,最後列印一張按高分到低分名次排序的成績單。要求:
1)排序用一個函數實現。
2)列印的成績單表項包括:序號,學號、數學、英語、計算機、總分、平均分。
3)按實驗報告電子模板格式填寫實驗內容。
四、功能描述
1. 學生基本信息及成績所選科目成績的錄入。
2. 基本信息的查詢(分系、班級;分科目)與修改。
3. 對每系或每班各科成績進行分析(即求單科平均成績、及格率和優秀率);
4. 對所開課程的成績分析(求其平均成績,最高分和最低分);
5. 對學生考試成績進行排名(單科按系別或班級進行排名,對每一個班級,同一學期學生總體成績進行排名,並顯示各科成績信息)
五、解決方案
1. 分析程序的功能要求,劃分程序功能模塊。
2. 畫出系統流程圖。
3. 代碼的編寫。定義數據結構和各個功能子函數。
4. 程序的功能調試。
5. 完成系統總結報告以及使用說明書
六、進度安排
此次課程設計時間為兩周,分四個階段完成:
1. 分析設計階段。指導教師應積極引導學生自主學習和鑽研問題,明確設計要求,找出實現方法,按照需求分析、總體設計、詳細設計這幾個步驟進行。
2. 編碼調試階段:根據設計分析方案編寫C代碼,然後調試該代碼,實現課題要求的功能。
3. 總結報告階段:總結設計工作,寫出課程設計說明書,要求學生寫出需求分析、總體設計、詳細設計、編碼、測試的步驟和內容。
4. 考核階段。
#include <stdio.h>
#include <stdlib.h>
#define STU_NUM 10 /*宏定義學生的數量*/
struct student /*定義一個結構體用來存放學生學號、三門課成績、總分及平均成績*/
{
char stu_id[20]; /*學生學號;*/
float score[3]; /*三門課成績;*/
float total; /*總成績;*/
float aver; /*平均成績;*/
};
/*排序用一個函數來實現*/
void SortScore(student *stu,int n)
{
student stud;
for(int i = 0; i < n-1; i++)
for(int j = i+1 ; j < n; j++)
{
if(stu[i].total < stu[j].total)
{
stud = stu[i];
stu[i] = stu[j];
stu[j] = stud;
}
}
}
int main( )
{
student stu[STU_NUM]; /*創建結構體數組中有10個元素,分別用來保存這10個人的相關信息。*/
/*輸入這十個學生的相關信息*/
for(int i = 0; i<STU_NUM; i++)
{
printf("請輸入第%d個學生的學號:",i+1);
scanf("%s",&stu[i].stu_id);
printf("輸入第%d個學生的數學成績:",i+1);
scanf("%f",&stu[i].score[0]);
printf("輸入第%d個學生的英語成績:",i+1);
scanf("%f",&stu[i].score[1]);
printf("輸入第%d個學生的計算機成績:",i+1);
scanf("%f",&stu[i].score[2]);
stu[i].total = stu[i].score[0]+stu[i].score[1]+stu[i].score[2];
stu[i].aver = stu[i].total/3;
}
printf("\n");
SortScore(stu,STU_NUM);/*調用排序函數*/
/*輸出排序後的各學生的成績*/
for(i = 0 ; i < STU_NUM; i++)
{
printf("序號: %d\t",i);
printf("學號:%s\t",stu[i].stu_id);
printf("數學:%f\t",stu[i].score[0]);
printf("英語:%f\t",stu[i].score[1]);
printf("計算機:%f\t",stu[i].score[2]);
printf("平均成績:%f\t",stu[i].aver);
printf("總分:%f\t",stu[i].total);
printf("\n\n");
}
return 0;
}
註:(源程序中主要標識符含義說明)
#define STU_NUM 10 /*宏定義學生的數量*/
struct student /*定義一個結構體用來存放學生學號、三門課成績、總分及平均成績*/
{
char stu_id[20]; /*學生學號;*/
float score[3]; /*三門課成績;*/
float total; /*總成績;*/
float aver; /*平均成績;*/
}
實驗結果:
輸入 :(只輸入後面的數字,前面的文字是自己產生的)。
請輸入第1個學生的學號:001
輸入第1個學生的數學成績:1
輸入第1個學生的英語成績:1
輸入第1個學生的計算機成績:1
請輸入第2個學生的學號:002
輸入第2個學生的數學成績:2
輸入第2個學生的英語成績:2
輸入第2個學生的計算機成績:2
請輸入第3個學生的學號:003
輸入第3個學生的數學成績:3
輸入第3個學生的英語成績:3
輸入第3個學生的計算機成績:3
請輸入第4個學生的學號:004
輸入第4個學生的數學成績:4
輸入第4個學生的英語成績:4
輸入第4個學生的計算機成績:4
請輸入第5個學生的學號:005
輸入第5個學生的數學成績:5
輸入第5個學生的英語成績:5
輸入第5個學生的計算機成績:5
請輸入第6個學生的學號:006
輸入第6個學生的數學成績:6
輸入第6個學生的英語成績:6
輸入第6個學生的計算機成績:6
請輸入第7個學生的學號:007
輸入第7個學生的數學成績:7
輸入第7個學生的英語成績:7
輸入第7個學生的計算機成績:7
請輸入第8個學生的學號:008
輸入第8個學生的數學成績:8
輸入第8個學生的英語成績:8
輸入第8個學生的計算機成績:8
請輸入第9個學生的學號:009
輸入第9個學生的數學成績:9
輸入第9個學生的英語成績:9
輸入第9個學生的計算機成績:9
請輸入第10個學生的學號:010
輸入第10個學生的數學成績:10
輸入第10個學生的英語成績:10
輸入第10個學生的計算機成績:10
輸出:
序號: 0 學號:010 數學:10.000000 英語:10.000000 計算機:10.000000
平均成績:10.000000 總分:30.000000
序號: 1 學號:009 數學:9.000000 英語:9.000000 計算機:9.000000
平均成績:9.000000 總分:27.000000
序號: 2 學號:008 數學:8.000000 英語:8.000000 計算機:8.000000
平均成績:8.000000 總分:24.000000
序號: 3 學號:007 數學:7.000000 英語:7.000000 計算機:7.000000
平均成績:7.000000 總分:21.000000
序號: 4 學號:006 數學:6.000000 英語:6.000000 計算機:6.000000
平均成績:6.000000 總分:18.000000
序號: 5 學號:005 數學:5.000000 英語:5.000000 計算機:5.000000
平均成績:5.000000 總分:15.000000
序號: 6 學號:004 數學:4.000000 英語:4.000000 計算機:4.000000
平均成績:4.000000 總分:12.000000
序號: 7 學號:003 數學:3.000000 英語:3.000000 計算機:3.000000
平均成績:3.000000 總分:9.000000
序號: 8 學號:002 數學:2.000000 英語:2.000000 計算機:2.000000
平均成績:2.000000 總分:6.000000
序號: 9 學號:001 數學:1.000000 英語:1.000000 計算機:1.000000
平均成績:1.000000 總分:3.000000
七、撰寫課程設計報告或課程設計總結
課程設計報告要求:
總結報告包括需求分析、總體設計、詳細設計、編碼(詳細寫出編程步驟)、測試的步驟和內容、課程設計總結、參考資料等,不符合以上要求者,則本次設計以不及格記。
C語言常見錯誤
書寫標識符時,忽略了大小寫字母的區別
main()
{
int a=5;
printf("%d",A);
}
編譯程序把a和A認為是兩個不同的變數名,而顯示出錯信息。C認為大寫字母和小寫字母是兩個不同的字元。習慣上,符號常量名用大寫,變數名用小寫表示,以增加可讀性。
2.忽略了變數的類型,進行了不合法的運算。
main()
{
float a,b;
printf("%d",a%b);
}
%是求余運算,得到a/b的整余數。整型變數a和b可以進行求余運算,而實型變數則不允許進行「求余」運算。
3.將字元常量與字元串常量混淆。
char c;
c="a";
在這里就混淆了字元常量與字元串常量,字元常量是由一對單引號括起來的單個字元,字元串常量是一對雙引號括起來的字元序列。C規定以「\」作字元串結束標志,它是由系統自動加上的,所以字元串「a」實際上包含兩個字元:『a'和『\',而把它賦給一個字元變數是不行的。
4.忽略了「=」與「==」的區別。
在許多高級語言中,用「=」符號作為關系運算符「等於」。如在BASIC程序中可以寫
if (a=3) then …
但C語言中,「=」是賦值運算符,「==」是關系運算符。如:
if (a==3) a=b;
前者是進行比較,a是否和3相等,後者表示如果a和3相等,把b值賦給a。由於習慣問題,初學者往往會犯這樣的錯誤。
5.忘記加分號。
分號是C語句中不可缺少的一部分,語句末尾必須有分號。
a=1
b=2
編譯時,編譯程序在「a=1」後面沒發現分號,就把下一行「b=2」也作為上一行語句的一部分,這就會出現語法錯誤。改錯時,有時在被指出有錯的一行中未發現錯誤,就需要看一下上一行是否漏掉了分號。
{ z=x+y;
t=z/100;
printf("%f",t);
}
對於復合語句來說,最後一個語句中最後的分號不能忽略不寫(這是和PASCAL不同的)。
6.多加分號。
對於一個復合語句,如:
{ z=x+y;
t=z/100;
printf("%f",t);
};
復合語句的花括弧後不應再加分號,否則將會畫蛇添足。
又如:
if (a%3==0);
I++;
本是如果3整除a,則I加1。但由於if (a%3==0)後多加了分號,則if語句到此結束,程序將執行I++語句,不論3是否整除a,I都將自動加1。
再如:
for (I=0;I<5;I++);
{scanf("%d",&x);
printf("%d",x);}
本意是先後輸入5個數,每輸入一個數後再將它輸出。由於for()後多加了一個分號,使循環體變為空語句,此時只能輸入一個數並輸出它。
7.輸入變數時忘記加地址運算符「&」。
int a,b;
scanf("%d%d",a,b);
這是不合法的。Scanf函數的作用是:按照a、b在內存的地址將a、b的值存進去。「&a」指a在內存中的地址。
8.輸入數據的方式與要求不符。①scanf("%d%d",&a,&b);
輸入時,不能用逗號作兩個數據間的分隔符,如下面輸入不合法:
3,4
輸入數據時,在兩個數據之間以一個或多個空格間隔,也可用回車鍵,跳格鍵tab。
②scanf("%d,%d",&a,&b);
C規定:如果在「格式控制」字元串中除了格式說明以外還有其它字元,則在輸入數據時應輸入與這些字元相同的字元。下面輸入是合法的:
3,4
此時不用逗號而用空格或其它字元是不對的。
3 4 3:4
又如:
scanf("a=%d,b=%d",&a,&b);
輸入應如以下形式:
a=3,b=4
9.輸入字元的格式與要求不一致。
在用「%c」格式輸入字元時,「空格字元」和「轉義字元」都作為有效字元輸入。
scanf("%c%c%c",&c1,&c2,&c3);
如輸入a b c
字元「a」送給c1,字元「 」送給c2,字元「b」送給c3,因為%c只要求讀入一個字元,後面不需要用空格作為兩個字元的間隔。
10.輸入輸出的數據類型與所用格式說明符不一致。
例如,a已定義為整型,b定義為實型
a=3;b=4.5;
printf("%f%d\n",a,b);
編譯時不給出出錯信息,但運行結果將與原意不符。這種錯誤尤其需要注意。
11.輸入數據時,企圖規定精度。
scanf("%7.2f",&a);
這樣做是不合法的,輸入數據時不能規定精度。
12.switch語句中漏寫break語句。
例如:根據考試成績的等級列印出百分制數段。
switch(grade)
{ case 'A':printf("85~100\n");
case 'B':printf("70~84\n");
case 'C':printf("60~69\n");
case 'D':printf("<60\n");
default:printf("error\n");
由於漏寫了break語句,case只起標號的作用,而不起判斷作用。因此,當grade值為A時,printf函數在執行完第一個語句後接著執行第二、三、四、五個printf函數語句。正確寫法應在每個分支後再加上「break;」。例如
case 'A':printf("85~100\n");break;
13.忽視了while和do-while語句在細節上的區別。
(1)main()
{int a=0,I;
scanf("%d",&I);
while(I<=10)
{a=a+I;
I++;
}
printf("%d",a);
}
(2)main()
{int a=0,I;
scanf("%d",&I);
do
{a=a+I;
I++;
}while(I<=10);
printf("%d",a);
}
可以看到,當輸入I的值小於或等於10時,二者得到的結果相同。而當I>10時,二者結果就不同了。因為while循環是先判斷後執行,而do-while循環是先執行後判斷。對於大於10的數while循環一次也不執行循環體,而do-while語句則要執行一次循環體。
14.定義數組時誤用變數。
int n;
scanf("%d",&n);
int a[n];
數組名後用方括弧括起來的是常量表達式,可以包括常量和符號常量。即C不允許對數組的大小作動態定義。
15.在定義數組時,將定義的「元素個數」誤認為是可使的最大下標值。
main()
{static int a[10]={1,2,3,4,5,6,7,8,9,10};
printf("%d",a[10]);
}
C語言規定:定義時用a[10],表示a數組有10個元素。其下標值由0開始,所以數組元素a[10]是不存在的。
16.初始化數組時,未使用靜態存儲。
int a[3]={0,1,2};
這樣初始化數組是不對的。C語言規定只有靜態存儲(static)數組和外部存儲(exterm)數組才能初始化。應改為:
static int a[3]={0,1,2};
17.在不應加地址運算符&的位置加了地址運算符。
scanf("%s",&str);
C語言編譯系統對數組名的處理是:數組名代表該數組的起始地址,且scanf函數中的輸入項是字元數組名,不必要再加地址符&。應改為:
scanf("%s",str);
18.同時定義了形參和函數中的局部變數。
int max(x,y)
int x,y,z;
{z=x>y?x:y;
return(z);
}
形參應該在函數體外定義,而局部變數應該在函數體內定義。應改為:
int max(x,y)
int x,y;
{int z;
z=x>y?x:y;
return(z);
}
C語言心得體會
通過這次實訓,增加了我學習軟體技術的興趣,雖然還不明確軟體技術包含的具體內容,但從C語言這門課程開始,已發現程序設計的樂趣,在學習C語言的過程中也學到了許多計算機應用基礎知識,對計算機的機體也有了一個大體的了解。
這次實訓是老師給了范常式序,經過自己的改寫,實現要求。先做簡單的輸出,一步步的再做其它圖案,在實際操作過程中犯的一些錯誤還會有意外的收獲,感覺實訓很有意思。在具體操作中對這學期所學的C語言的理論知識得到鞏固,達到實訓的基本目的,也發現自己的不足之出,在以後的上機中應更加註意,同時體會到C語言具有的語句簡潔,使用靈活,執行效率高等特點。發現上機實訓的重要作用,特別是對數組和循環有了深刻的理解。
通過實際操作,學會 C語言程序編程的基本步驟、基本方法,開發了自己的邏輯思維能力,培養了分析問題、解決問題的能力。深刻體會到「沒有做不到的,只有想不到的」,「團結就是力量」,「實踐是檢驗真理的標准」,「不恥下問」……的寓意。
計時在此希望以後應多進行這樣的實訓,加長設間,培養學生獨立思考問題的能力,提高實際操作水平。
八、參考資料 :《C語言程序設計教程》