?? task_filework.cpp
字號:
#include <iostream.h>
#include <fstream.h>
#include <iomanip.h>
#include <string.h>
#include "filework.h"
#include "student.h"
#include "deeds.h"
ifstream fin;
ofstream fout;
void fileIn(student *&headOfStudent,courselist *&headOfCourse)
{
char s[100];
cin.ignore(100,'\n');
cout<<char(7);
cout<<"\n警告:從文件讀入數據將丟失該操作前的所有輸入信息!\n"
<<"如果要繼續,請按回車鍵:";
cin.getline(s,100);
if (s[0])
{
cout<<char(7);
cout<<"\n從文件讀入操作被終止!"<<endl;
fin.close();
return;
}
if (headOfStudent)
Free_Student(headOfStudent);
if (headOfCourse)
Free_Courselist(headOfCourse);
cout<<"\n請輸入您的數據文件的名稱,如 Student_Input.txt "<<endl;
cin>>s;
fin.open(s);
if (!fin)
{
cout<<char(7);
cout<<"\n打開文件失敗!請確認文件名是否正確,文件是否放在該程序目錄下!"<<endl;
fin.close();
return;
}
cin.ignore(100,'\n');
cout<<"\n請確認輸入文件的格式滿足以下要求:\n"
<<" 1. 文件第一行是一個正整數n,后面為n個課程名及其學分,相互以空格隔開\n"
<<" 2. 文件第二行至文件尾,為若干學生信息\n"
<<" 3. 學生信息的格式為:\n"
<<" (a)學生姓名 學號 各科成績\n"
<<" (b)各個輸入之間用空格隔開,一個學生的信息獨占一行\n"
<<" (c)學生姓名為少于五個字的漢字,中間不能包含空格\n"
<<" (d)學號為標準的8位學號,如:00648127 \n"
<<" (e)學生各科成績的輸入順序與第一行課程順序對應,如果該學生未選這門課,則輸入 -1\n"
<<"\n若都已確認,請按回車鍵:";
cin.getline(s,100);
if (s[0])
{
cout<<char(7);
cout<<"\n文件格式不符合要求,文件讀入失敗!"<<endl;
fin.close();
return;
}
short coursenumber,i;
fin>>coursenumber;
if (cin.fail() || (coursenumber<0))
{
cout<<char(7);
cout<<"\n文件格式不符合要求,文件讀入失敗!"<<endl;
fin.close();
return;
}
cout<<"\n已讀入:\n"<<coursenumber<<' ';
courselist *temp,*endv;
if (coursenumber)
{
temp=new courselist;
if (temp==NULL)
{
cout<<char(7)<<endl;
cout<<"\n申請內存失敗!不能讀入學生信息!"<<endl;
fin.close();
return;
}
fin>>temp->courseName>>temp->credits;
if (cin.fail())
{
cout<<char(7)<<endl;
cout<<"\n課程學分輸入有誤!文件讀入失敗!"<<endl;
fin.close();
return;
}
cout<<temp->courseName<<' '<<temp->credits<<' ';
temp->next=NULL;
}
headOfCourse=temp;
endv=temp;
for (i=1;i<coursenumber;i++)
{
temp=new courselist;
if (temp==NULL)
{
cout<<char(7)<<endl;
cout<<"\n申請內存失敗!不能讀入學生信息!"<<endl;
fin.close();
return;
}
fin>>temp->courseName>>temp->credits;
if (cin.fail())
{
cout<<char(7)<<endl;
cout<<"\n課程學分輸入有誤!文件讀入失敗!"<<endl;
fin.close();
return;
}
cout<<temp->courseName<<' '<<temp->credits<<' ';
temp->next=NULL;
endv->next=temp;
endv=temp;
}
cout<<endl;
student *tem;
courseOfStudent *course,*endvv;
while (!fin.eof())
{
tem=new student;
temp=headOfCourse;
if (tem==NULL)
{
cout<<char(7)<<endl;
cout<<"\n申請內存失敗!不能讀入學生信息!"<<endl;
fin.close();
return;
}
tem->studentName[0]=0;
tem->studentNumber[0]=0;
fin>>tem->studentName>>tem->studentNumber;
if (tem->studentName[0]==0)
{
fin.close();
return;
}
cout<<tem->studentName<<' '<<tem->studentNumber<<' ';
tem->courses=NULL;
tem->pNameLc=NULL;
tem->pNameRc=NULL;
tem->pNumberLc=NULL;
tem->pNumberRc=NULL;
tem->pScoreLc=NULL;
tem->pScoreRc=NULL;
for (i=0;i<coursenumber;i++)
{
course=new courseOfStudent;
if (course==NULL)
{
cout<<char(7)<<endl;
cout<<"\n申請內存失敗!不能讀入學生信息!"<<endl;
fin.close();
return;
}
strcpy(course->courseName,temp->courseName);
fin>>course->score;
if (cin.fail())
{
cout<<char(7)<<endl;
cout<<"\n學生"<<tem->studentName<<"的課程成績輸入有誤!文件讀入失敗!"<<endl;
fin.close();
return;
}
cout<<course->score<<' ';
course->next=NULL;
if (tem->courses==NULL)
{
tem->courses=course;
endvv=course;
}
else
{
endvv->next=course;
endvv=course;
}
temp=temp->next;
}
StudentAdd_Name(headOfStudent,tem);
StudentAdd_Number(headOfStudent,tem);
cout<<endl;
}
}
void fileOut(student *&headOfStudent,courselist *&headOfCourse,char filename[])
{
filename[0]=0;
char s[100];
cin.ignore(100,'\n');
cout<<"\n所有學生信息將被保存到文件中!繼續請按回車,放棄請按其他鍵并回車";
cin.getline(s,100);
if (s[0])
{
cout<<char(7);
cout<<"\n學生信息保存到文件被終止!"<<endl;
return;
}
cout<<"\n請輸入您想要將學生信息保存到的文件名,如 Student_Output.txt \n"
<<"請輸入:";
cin>>s;
fout.open(s);
if (!fout)
{
cout<<char(7);
cout<<"\n創建文件失敗!學生信息不能保存到 "<<s<<" 中!"<<endl;
return;
}
int coursesnumber=0;
courselist *temp=headOfCourse;
while (temp)
{
coursesnumber++;
temp=temp->next;
}
fout<<setw(25)<<setiosflags(ios::left)<<coursesnumber;
temp=headOfCourse;
while (temp)
{
fout<<temp->courseName<<' '<<temp->credits<<" ";
temp=temp->next;
}
fout<<endl;
if (headOfStudent)
Fout(headOfStudent);
fout.close();
strcpy(filename,s);
}
void Fout(student *&head)
{
if (head->pNameLc)
Fout(head->pNameLc);
fout<<setw(15)<<setiosflags(ios::left)<<head->studentName
<<setw(10)<<head->studentNumber;
courseOfStudent *p=head->courses;
while (p)
{
fout<<setw(8)<<setiosflags(ios::fixed)<<setprecision(2)<<p->score;
p=p->next;
}
fout<<endl;
if (head->pNameRc)
Fout(head->pNameRc);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -