資源簡介
學生選題信息
題目序號為: 029
題目為:
學生成績管理系統
題目內容為:
學生成績管理系統(限1 人完成)
現有學生成績信息文件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) 要求使用結構體,鏈或數組等實現上述要求.
6) 采用多種方法且算法正確者,可適當加分.

代碼片段和文件信息
#include
using?namespace?std;
#define?SIZE?100
//存放學生數據的結構體
typedef?struct?
{
char?name[8];
char?id[2];
int?chinese;
int??math;
int?english;
int?sum;
}Student;
Student?stud[SIZE];
int?i;
int?sign=0sign1=0sign2=0sign3=0;
void?Unitedfile()//合并1.txt和2.txt為3.txt
{
FILE?*fp*p;
Student?studd;
fp=fopen(“1.txt““r“);//以讀的方式打開1.txt
p=fopen(“3.txt““w“);//以寫的方式打開3.txt
while(fscanf(fp“%s%s%d%d%d“studd.namestudd.id&studd.chinese&studd.math&studd.english?)!=EOF)
{
fprintf(p“%-6s??%-6s??%-6d??%-6d??%-6d\n“studd.namestudd.idstudd.chinesestudd.mathstudd.english?);
}//讀取1.txt的數據進入結構體中,寫入3.txt,繼續讀取直結束
fclose(fp);//關閉文件1.txt
fp=fopen(“2.txt““r“);//以寫的方式打開2.txt
while(fscanf(fp“%s%s%d%d%d“studd.namestudd.id&studd.chinese&studd.math&studd.english?)!=EOF)
{
fprintf(p“%-6s??%-6s??%-6d??%-6d??%-6d\n“studd.namestudd.idstudd.chinesestudd.mathstudd.english?);
}
fclose(fp);
fclose(p);
}
void?findout()//抽取出三科成績中有補考的學生并保存在一個新文件4.txt
{
FILE?*fp*p;
Student?studd;
fp=fopen(“3.txt““r“);
p=fopen(“4.txt““w“);
while(fscanf(fp“%s%s%d%d%d“studd.namestudd.id&studd.chinese&studd.math&studd.english?)!=EOF)
{
if(studd.chinese<60||studd.english<60||studd.math<60)
{
fprintf(p“%-6s??%-6s??%-6d??%-6d??%-6d\n“studd.namestudd.idstudd.chinesestudd.mathstudd.english?);
}
}//從3.txt中讀入學生數據進結構體,判斷是否有不及格的課程,如果有,則寫入文件4.txt中
fclose(fp);
fclose(p);
}
void?xuanze()?//對合并后的文件3.txt中的數據按總分降序排序
{
int?jkmax1sum1sum2q;
i=0;
Student?temp;
FILE?*fp;
fp=fopen(“3.txt““r“);
i=0;
while(fscanf(fp“%s%s%d%d%d“stud[i].namestud[i].id&stud[i].chinese&stud[i].math&stud[i].english?)!=EOF)
{
i++;
}//從3.txt中讀入數據進結構體數組stud中
fclose(fp);
for(j=0;j {
max1=j;
sum1=stud[j].math+stud[j].english+stud[j].chinese;
for(k=j+1;k {
sum2=stud[k].math+stud[k].english+stud[k].chinese;
if(sum1 {
max1=k;
sum1=sum2;
}
}
if(max1!=j)
{
temp=stud[max1];
stud[max1]=stud[j];
stud[j]=temp;
}
stud[j].sum=sum1;
}
fp=fopen(“3.txt““w“);//將排序后的數據寫入3.txt中
for(q=0;q {
fprintf(fp“%-8s??%-8s??%-8d??%-8d??%-8d???%-8d\n“stud[q].namestud[q].idstud[q].chinesestud[q].mathstud[q].englishstud[q].sum?);
}
fclose(fp);
}
int?Partition(int?lowint?high)
{
int?pivotkey;
Student?temp;
temp=stud[low];
pivotkey=stud[low].sum;
while(low {
while(low stud[low]=stud[high];
while(low=pivotkey)++low;
stud[high]=stud[low];
}
stud[low]=temp;
return?low;
}
void?QSort(int?lowint?high)//快速排序
{
int?privotloc;
if(low {
privotloc=Partition(lowhigh);
QSort(lowprivotloc-1);
QSort(privotloc+1high);
}
}
void?kuaisu()//讀取文件,快速排序,將結果寫入3.txt
{
int?ilowhigh;
FILE?*fp;
fp=fopen(“3.txt““r“);
i=0;
while(fscanf(fp“%s%s%d%d
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????1113??2010-04-28?17:40??試題.in
?????文件?????111616??2010-06-04?19:01??數據結構課程設計---周鵬華.doc
?????文件???????7026??2010-06-04?18:55??2.cpp
-----------?---------??----------?-----??----
???????????????119755????????????????????3
- 上一篇:c++課程設計賓館客房管理系統
- 下一篇:數據結構課程設計撲克牌排序
評論
共有 條評論