?? java.txt
字號:
}
out.close();
}catch(IOException e){}
}
public void rewrite()
throws IOException,NumberNotFoundException
{
try{
System.out.print("請輸入你要修改的學生學號:");
BufferedReader in =
new BufferedReader (
new InputStreamReader(System.in));
String inputLine = in.readLine();
long num = Integer.valueOf(inputLine).longValue();
findData(num);
if(isFind)
{
deleteData(num);
System.out.print("請重新輸入該學生的資料:");
String str = inputData();
addData(str);
System.out.println("rewrite true!");
}
}catch(IOException e){}
catch(NumberNotFoundException e){}
}
public int count()
throws IOException
{
DataArrayList dal = new DataArrayList();
try{
String s = "";
long i =0;
BufferedReader in =
new BufferedReader(
new FileReader("data.txt"));
while ((s=in.readLine())!=null)
{
i=numberTokenizer(s);
dal.add(i);
}
}catch(IOException e){}
return dal.size();
}
}
/*
*
* @author RangWei
* TODO 這是個我們寫的一個容器,繼承公共類HashMap
* 大概的功能就相當一個數組
*
*/
class DataMap extends HashMap//一個存儲數據的Map
{
public void put(long i,String str)//把學號和數據放進這個Map
{ //以后一個學號(key)對應的是一個人的數據(value)
put(String.valueOf(i).toString(),str);
}
public void remove(long i)//接收學號,然后刪除學號(key)和它對應的數據(value)
{
remove(String.valueOf(i).toString().toString());
}
public String get(long i)//接收一個學號,然后返回這個key對應的value
{
String s = String.valueOf(i).toString();
if (!containsKey(s))
{
System.err.println("Not found Key: "+s);
}
return (String)get(s);
}
}
/*
*
* @author RangWei
*
* TODO 這個類繼承ArrayList
* 用來按數字排序,在用學號排序時要用到它
*
*/
class DataArrayList extends ArrayList
{
public void add(long num)
{
String numToString = String.valueOf(num).toString();
add(numToString);
}
}
/*
*
* @author RangWei
*
* TODO 增加的一個Exception,主要是在文件里沒有要找
* 的學號就拋出
*
*/
class NumberNotFoundException extends Exception
{
public NumberNotFoundException()
{}
}
C語言課程設計報告-------學生成績簡單管理程序
一、系統菜單的主要功能
(1)輸入若干條記錄
(2)顯示所有記錄
(3)按學號排序
(4)插入一條記錄
(5)按姓名查找,刪除一條記錄
(6)查找并顯示一條記錄
(7)輸出統計信息 (新增)
(8)從正文中添加數據到結構體數組中
(9)將所有數據寫入文件中
(0)退出程序
二、題目分析
該題主要考察學生對結構體,指針,文件的操作,以及C語言算法的掌握,所以完成此道題目要求較強的設計能力,尤其是要有一種大局觀的意識。如何調程序也非常重要,通過這個程序可以學習到以前調試短程序沒有的的經驗。
菜單中的每一個選項都對應一個子程序,子程序的算法幾乎囊獲了所有C語言學過的技巧,下面就各個子程序中的功能進行說明:
功能1和4的算法相似,輸入一條記錄到結構體中去,其中有一部很關鍵,就是通過gets將所有的多余的字符,回車讀去,否則就會出錯。
功能2是顯示所有的記錄,通過循環輸出,格式也比較重要。
功能3為按學號排序,因為學號定義成了字符數組的形式,因此在運用冒泡法進行排序的時候,要用到strcmp,strcpy等函數。
功能5為按姓名刪除記錄,先輸入姓名,再一一比較,如果沒有則返回失敗信息,如果找到就將此記錄都向前移一位,返回n-1。
功能6的算法在5中就已經體現了,輸入姓名,一一比較。
功能7為新增的功能,因為考慮到原來給出的函數中竟然沒有對學生成績的統計功能,因此新增此功能,可以得出所有的記錄個數,最高、最低、平均分,并輸出相關的學生信息等。
功能8和9是對文件的操作,提前準備好數據。
總體設計
一、 仔細閱讀系統要求,首先將此系統化分為如下模塊(即如下函數)
1、輸入初始的學生信息:其中包括學生的姓名、學號和性別以及學生的語文、數學、英語和計算機等相關信息;可用函數cin(stu *p1)來實現此操作。
2、查詢模塊:可用stu *lookdata(stu *p1) 來實現。找到就輸出此學生全部信息包括學生的語文、數學、英語和計算機等的成績。
3、插入模塊:可用insert( )函數來實現。其中通過學號的大小來比較的,并且以此來排序。
4、輸出學生的信息以及成績:通過學生的姓名來查看學生的語文、數學、英語和計算機等相關成績,同時也可以分別通過caverage() 、maverage() 、eaverage() 和comaverage() 來輸出語文、數學、英語和計算機等成績的平均分數、最高和最低分數。
5、退出系統:可用一個函數exit()
學生成績管理系統
請選擇相應的數字執行相應的功能:
1:是否輸入其他數據
2:查看數據
3:插入數據
4:查找數據
5:更新數據
6:保留數據
7:顯示或打印數據
8:語文成績狀況
9:數學成績狀況
10:英語成績狀況
11:計算機成績狀況
12:?
13:退出系統
程序中出現的問題及解決方法
問題一、學生初始信息模塊:
其中包括學生的姓名、學號和性別以及學生的語文、數學、英語和計算機等相關信息;可用函數cin(stu *p1)來實現此操作。當正確輸入存在的學生學號,系統進行判斷時,提示不存在此學生。
解決辦法及步驟:
1、一個個輸出所有的學生的學號,檢查文件中是否有此學生,發現有。
2、既然有此學生,那么檢查循環判斷是否有此學生的語句發現沒有錯
3、輸出用于循環檢查語句中的學生信息,發現亂碼
4、仔細分析亂碼的原因,最后發現是變量的類型錯誤,錯將學生類型的結構體指針變量定義為了其他類型的指針變量。
問題二、查詢模塊:
可用stu *lookdata(stu *p1) 來實現。找到就輸出此學生全部信息包括學生的語文、數學、英語和計算機等的成績。當正確輸入查找信息時,系統卻不能夠得到所要查找的學生信息以及學生的語文、數學、英語和計算機的成績。
解決辦法及步驟:
1、檢查所編寫的程序代碼是否完全正確,若不是,則改之,然后再繼續正確輸入查找信息看能否得到所要查找的學生信息以及學生的語文、數學、英語和計算機的成績。
2、檢查當我們在輸入查找信息時,看是否我們輸入的信息有誤,若是這樣的話,我們應當仔細輸入查找信息。
問題三、插入模塊:
可用insert( )函數來實現。其中通過學號的大小來比較的,并且以此來排序。當我們輸入插入信息時,系統卻提示插入不進數據。
解決辦法及步驟:
1、檢查所編寫的程序代碼是否完全正確,若不是,則改之,然后再繼續正確輸入插入信息看能否插入進去得到所要插入的學生信息以及學生的語文、數學、英語和計算機的成績。
2、檢查當我們在輸入插入信息時,看是否我們輸入的插入信息有
C語言課程設計報告
一、實踐的目的和要求
加深對《C語言》課程所學知識的理解,進一步鞏固C語言講法規則。學會編制結構清晰、風格良好、數據結構適當的C語言程序,從而具備解決綜合性實際問題的能力
二、內容
在熟練掌握C語言的基本知識:數據類型(整形、實型、字符型、指針、數組、結構等);運算類型(算術運算、邏輯運算、自增自減運算、賦值運算等);程序結構(順序結構、判斷選擇結構、循環結構);大程序的功能分解方法(即函數的使用)等。進一步掌握各種函數的應用,包括時間函數、、繪圖函數,以及文件的讀寫操作等
三、實踐任務
1.學生成績管理系統
建立一個5個學生的信息登記表,每個學生和信息包括:學號,姓名,和3門課程的成績(MATH,C,ENGLISH)。程序運行時顯示一個簡單的菜單 例如:
(1):信息輸入(INPUT)
(2):顯示信息(DISPLAY)
(3):總分統計(COUNT)
(4):總分排序(SORT)
(5):查詢(QUERY)
其中:
(1):對5個學生的信息進行輸入;
(2):顯示當前學生記錄的信息,若無記錄,則給出提示信息;
(3):對每個學生的3門課程統計總分;
(4):對5個學生的總分按升序序排序并顯示出來;
(5):可以按“學號”、“姓名”查詢該生的有關信息。
總體設計:
總結感想
開發一個編譯器是一個比較漫長的過程。需要我對每一個模塊都深思熟慮,每一個算法都充分理解,每一個數據結構都人身設計。在整個完成課程設計的過程中,我們主要收獲了以下的幾點經驗。
1 要學會具體問題具體分析
在著手開始編寫代碼的時候,我已經將教材還有龍書看過一遍了,但是在實際動手的時候,才發現并不是像書上說的那么清楚明白,C語言的特性與書上舉例用的語言特性有許多不同,這時就不能生搬硬套書上的算法,要結合C語言的特點,采用書上的思想,這樣才能把問題解決。
2 設計數據結構的重要性
在我編寫代碼的過程中,最常出現的現象就是反復修改數據結構,甚至在進行優化的時候還回過頭去修改中間代碼的數據結構。這就導致了我編寫代碼效率的降低,還有由于數據結構的反復修改,使得整個工程維護起來極其困難。這就說明數據結構的設計在整個設計階段是十分重要的,沒有一個設計良好的數據結構,代碼編寫階段就不會順利的進行。
3 交流和溝通
我們在開發初期遇到的很多問題都是通過與同學交流和溝通解決的。同學間無私、耐心的講解不僅讓整個課程設計進展順利,也讓我們每一個人都學到了很多。
總的來說,這次編譯課程設計對我來說真的是受益匪淺,通過這次實踐,讓我對書本上的知識有了深刻的理解,同時增強了自己的動手能力,更重要的是我學會了一系列處理問題的方法,有窮狀態機,語法制導等技術都有非常廣的應用范圍,還有通過代碼優化的學習還讓我知道如何讓我編寫的代碼運行效率更高,對我今后的實踐工作奠定了基礎。編譯是一門將程序設計語言、數據結構、算法、計算機體系結構、軟件工程等計算機知識緊密結合在一起的學科,它將對我今后的學習和工作產生巨大的幫助。?
注冊 | 登錄 | 博客首頁 | 我的主頁 | 幫助
小痞 http://blog.tom.com/kewend 復制地址 訂閱 笑著那些低處的,自以為是著,笑著.我站在不遠的前方,笑著那些后方的鼠目寸光著.我并不是自卑得笑了,我只是卑劣的笑著,我也不是自信的笑了,我為我的信仰笑著 首頁 日志 個性檔案 C語言課程設計總結報告
課程設計是培養學生綜合運用所學知識,發現,提出,分析和解決實際問題,鍛煉實踐能力的重要環節,是對學生實際工作能力的具體訓練和考察過程.隨著科學技術發展的日新月異,當今計算機應用在生活中可以說得是無處不在。因此作為二十一世紀的大學來說掌握計算機開發技術是十分重要的。回顧起此次課程設計,至今我們仍感慨頗多,的確,自從拿到題目到完成整個編程,從理論到實踐,在整整半個學期的日子里,可以學到很多很多的東西,同時不僅可以鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。通過這次課程設計使我們懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。在設計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設計的過程中發現了自己的不足之處,對一些前面學過的知識理解得不夠深刻,掌握得不夠牢固,比如說結構體,指針……通過這次課程設計之后,我們把前面所學過的知識又重新溫故了一遍。在設計中我們遇到了很多編程問題,最后在謝老師的辛勤指導下,我們慢慢的進入狀態,我們做的是一個俄羅斯方塊的設計,內容包括很多。運用的函數也是非常的復雜,我們一組有八個人,我們分工合作,首先我們一起完成了結構題,然后我們一人各負責一個函數程序的設計,經過幾星期的努力,我們完成了大半個程序,但是總是有很多錯誤出現,有好多是些小問題,這都是我們粗心大意造成的,所以設計程序一定要仔細,不容一點的馬虎。當然也有大問題,關于文件的操作,是我們最大的問題,不過,我們做好后,經過老師的講解和改錯,我們也懂得設計和運用了。同時,也讓我知道了,合作的力量,如果是孤軍奮戰的話,我們也不能在規定時間內完成,最終達到游紉而解。同時在這次課程設計中讓我們認識到做程序設計這項工作中我門要具備以下素質:很強的團隊精神和協作能力和文檔習慣。
良好的文檔是正規研發流程中非常重要的環節,缺乏文檔,一個軟件系統就缺乏生命力,在未來的查錯,升級以及模塊的復用時就都會遇到極大的麻煩。
此外編程是一項高精度的工作所以我們要有規范化,標準化的代碼編寫習慣通過這次編程我們深深的感受到對代碼的變量命名,代碼內注釋格式,甚至嵌套中行縮進的長度和函數間的空行數字都有明確規定,良好的編寫習慣,不但有助于代碼的移植和糾錯,也有助于不同人員之間的協作。
我們還要有模塊化思維能力 模塊化思維就是編程任何一個功能模塊或函數的時候,要多想一些,不要局限在完成當前任務的簡單思路上,想想看該模塊是否可以脫離這個系統存在,是否可以通過簡單的修改參數的方式在其他系統和應用環境下直接引用,這樣就能極大避免重復性的開發工作, 學習和總結
善于總結,也是學習能力的一種體現,每次完成一個編程任務,完成一段代碼,都應當有目的的跟蹤該程序的應用狀況,隨時總結,找到自己的不足,這樣所編寫的程序才能逐步提高,生活就是這樣,汗水預示著結果也見證著收獲。勞動是人類生存生活永恒不變的話題。通過實際動手做,我們才真正領略到“艱苦奮斗”這一詞的真正含義,我們想說,編程確實有些辛苦,但苦中也有樂,在這個團隊的任務中,一起的工作可以讓我們有說有笑,相互幫助,配合默契。對我們而言,知識上的收獲重要,精神上的豐收是可喜的。挫折是一份財富,經歷是一份擁有。這次實際操作必將成為我們人生旅途上一個非常美好的回憶!同時,在謝老師的身上我們學得到很多實用的知識,在次我們表示感謝!同時,對給過我幫助的所有同學和各位指導老師再次表示忠心的感謝!
#include<stdio.h>
#include <time.h>
#include<conio.h> /*清屏*/
#include <stdlib.h> /*顯示目錄*/
#include<string.h>
#define MAX 80
void input(); /*輸入數據函數*/
void sort();/*排序數據函數*/
void sort1();
void sort2();
void sort3();
void display();/*顯示數據函數*/
void display1();
void insert(); /*插入數據函數*/
void del(); /*刪除數據函數*/
void average(); /*平均值函數*/
void find();/*查找數據函數*/
void find1();
void find2();
void save(); /*保存數據函數*/
void read(); /*讀出數據函數*/
void del_file(); /*刪除文件函數*/
void modify(); /*修改文件函數*/
int now_no=0;
struct student
{
int no;
char name[20];
char sex[4];
float score1;
float score2;
float score3;
float sort;
float ave;
float sum;
};
struct student stu[MAX],*p;
main()/*主函數*/
{
int as;
char ch;
do{
start: printf("\n\n\n\t\t\t歡迎使用學生成績管理系統\n");
printf("\n\n\n\n\n\n\t\t******************按任意鍵繼續********************");
ch=getch();
}
while(!ch);
system("cls");
/*一下為功能選擇模塊*/
do
{
printf("\n\t\t\t\t1.錄入學員信息\n\t\t\t\t2.顯示學員總成績信息\n\t\t\t\t3.對總成績排序\n\t\t\t\t4.顯示學員單科成績排序\n\t\t\t\t5.添加學員信息\n\t\t\t\t6.刪除學員信息\n\t\t\t\t7.修改學員信息\n\t\t\t\t8.查詢學員信息\n\t\t\t\t9.從文件讀入學員信息\n\t\t\t\t10.刪除文件中學員信息\n\t\t\t\t11.保存學員信息\n\t\t\t\t12.退出\n");
printf("\t\t\t\t選擇功能選項(輸入所選功能前的數字):");
fflush(stdin);
/*可用可不用,用于清除緩存防止下次用scanf輸入是出現錯誤*/
scanf("%d",&as);
switch(as)
{
case 1:system("cls");
input();
break;
case 2:system("cls");
display();
break;
case 3:system("cls");
sort();
break;
case 4:system("cls");
display1();
break;
case 5:system("cls");
insert();
break;
case 6:system("cls");
del();
break;
case 7:system("cls");
modify();
break;
case 8:system("cls");
find();
break;
case 9:system("cls");
read();
break;
case 10:system("cls");
del_file();
break;
case 11:system("cls");
save();
break;
case 12:system("exit");
exit(0);
default:system("cls");
goto start;
}
}while(1);/*while(1),1表示真,所以while(1)表示永遠循環下去,一般在while(1)的循環體內都有break 或者return 跳出循環*/
/*至此功能選擇結束*/
}
void input()/*原始數據錄入模塊*/
{
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -