具体的设计方法,可以参考如下代码:
#include <stdioh>
#include <stringh>
#include <iostreamh>
#include <stdlibh>
#include <windowsh>
typedef struct studentinfo //结构体定义
{
int num;//学号
char name[64];//姓名
int sex;//性别,1为男性,0为女性
float math;//数学
float english;//英语
float politic;//政治
float chinese;//语文
float total;//总成绩
struct studentinfo next;
}STUDENT;
#define FILENAME "D:\\1txt"
//定义默认的数据库文件
#define DELAYTIME 1500
//显示信息,延时
void create_menu();
STUDENT new_student();
STUDENT create_linkbyfile(char );
STUDENT del_info(STUDENT );
int save_info(char ,STUDENT ,int);
int find_infile_printf(char );
int pri_whole_link(STUDENT );
STUDENT printf_sort(STUDENT );
void free_link(STUDENT );
void main() //主函数
{
create_menu();
}
void create_menu()
//功能:输出功能菜单,提供人-机接口
{
int menu_Num;
STUDENT head=NULL;
char ch;
char file_name[256];
while(1)
{
system("cls");
cout<<"\t\t学生成绩管理系统\n";
cout<<"##########################################\n";
cout<<"#\t\t 1新增学生信息\t\t #\n";
cout<<"#\t\t 2加载数据库\t\t #\n";
cout<<"#\t\t 3删除学生信息\t\t #\n";
cout<<"#\t\t 4保存学生信息\t\t #\n";
cout<<"#\t\t 5数据库查询\t\t #\n";
cout<<"#\t\t 6原序输出\t\t #\n";
cout<<"#\t\t 7排序输出\t\t #\n";
cout<<"#\t\t 8退出\t\t\t #\n";
cout<<"##########################################\n";
cout<<"请输入 *** 作编号:";
cin>>menu_Num;
switch (menu_Num)
{
case 1:
free_link(head);//释放链表空间
head=new_student();//新增学生信息
break;
case 2:
free_link(head);//释放链表空间
cout<<"请输入要加载的数据库文件的路径"<<endl;
cin>>file_name;
head=create_linkbyfile(file_name);//读取数据文件
if(head!=NULL)
{
cout<<"数据库"<<file_name<<"已加载"<<endl;
Sleep(DELAYTIME);
}
break;
case 3:
del_info(head);//删除学生信息
break;
case 4://保存学生信息
if (head==NULL)
{
cout<<"请先生成学生信息"<<endl;
Sleep(DELAYTIME);
}
else
{
cout<<"想将学生信息保存到哪个数据库文件?";
cin>>file_name;
cout<<"请选择保存方式:0追加到文件末尾 1覆盖文件\n";
cin>>menu_Num;
if(save_info(file_name,head,menu_Num)==0)//0表示追加,1表示覆盖
{
cout<<"信息保存失败\n";
}
else
{
cout<<"数据已保存到"<<file_name<<endl;
Sleep(DELAYTIME);
}
}
break;
case 5:
find_infile_printf(FILENAME);//数据库查询
break;
case 6://原序输出信息
pri_whole_link(head);
cout<<"返回主菜单? Y/N\t";
do
{
cin>>ch;
}while(ch!='Y'&&ch!='y');
break;
case 7://排序输出信息
do
{
if((head=printf_sort(head))==NULL)
{
cout<<"数据库未加载"<<endl;
Sleep(DELAYTIME);
break;
}
else
{
cout<<"选择其他方式排序? Y/N\t";
cin>>ch;
}
}while(ch=='Y'||ch=='y');
break;
case 8:
free_link(head);//释放链表空间
exit(0);
break;
default:
cout<<"输入有误!请重新输入!"<<endl;
break;
}
}
}
STUDENT new_student()
//功能:创建学生信息(通过链表)
//返回值:头结点指针
{
STUDENT pnew,p,head;
float pfloat;
char ch;
head=NULL;
do
{
system("cls");
pnew=(STUDENT )malloc(sizeof(STUDENT)1);
cout<<"请输入学生的学号(0表示取消): ";
cin>>pnew->num;
if(0>=pnew->num)
{
break;
}
cout<<"请输入学生的姓名:";
cin>>pnew->name;
while(1)
{
cout<<"请输入学生的性别:0/1\t";
cin>>pnew->sex;
if(pnew->sex&&pnew->sex-1)
{
cout<<"性别输入错误,0表示女性,1表示男性,请重新输入"<<endl;
}
else
{
break;
}
}
cout<<"请依次输入学生的数学、英语、政治、语文成绩:"<<endl;
for(pnew->total=0,pfloat=&pnew->math;pfloat<&pnew->math+4;)
{
cin>>pfloat;
if(pfloat<0||pfloat>150)
{
cout<<"成绩输入错误,只能为0~150"<<endl;
}
else
{
pnew->total+=pfloat;
pfloat++;
}
}
if(head==NULL)
{
head=pnew;
}
else
{
p->next=pnew;
}
p=pnew;
pnew->next=NULL;
cout<<"##########################该学生信息已生成#########################\n";
cout<<"建立另一个学生的信息? Y/N\t";
cin>>ch;
}while(ch=='Y'||ch=='y');
return head;
}
STUDENT create_linkbyfile(char filename)
//功能:读取文件,创建链表
//参数:如果filename不为空,则打开该文件,如果filename为空,要求输入文件位置
//创建的链表的所有结点的next全部修改,指向物理地址上的下一个结点
{
system("cls");
FILE fp;
STUDENT head,ptemp,pnew;
head=NULL;//初始化head为空
if(filename==NULL)//若filename为空,要求输入文件绝对地址
{
char file_name[256];
cout<<"请输入数据库文件的路径:"<<endl;
cin>>file_name;
if(NULL==(fp=fopen(file_name,"rb")))
{
cout<<"数据库连接失败\n";
return 0;
}
}
else
{
if(NULL==(fp=fopen(filename,"rb")))
{
cout<<"数据库连接失败\n";
return 0;
}
}
for(ptemp=NULL;;)
{
pnew=(STUDENT )malloc(sizeof(STUDENT)1);
if(fread(pnew,sizeof(STUDENT),1,fp)!=NULL)
{
if(ptemp!=NULL)
{
ptemp->next=pnew;
}
else
{
head=pnew;
}
ptemp=pnew;
}
else
{
if(ptemp!=NULL)
{
ptemp->next=NULL;
}
else
{
head=NULL;
}
free(pnew);
break;
}
}
fclose(fp);
return head;
}
STUDENT del_info(STUDENT head)
//根据学号,删除链表的结点
{
system("cls");
STUDENT p1,p2;
int num;
if (head==NULL)
{
cout<<"数据库未加载"<<endl;
Sleep(DELAYTIME);
return 0;
}
cout<<"请输入要删除学生的学号:";
cin>>num;
for(p1=head;p1!=NULL;)
{
if(p1->num==num)/到
{
if(p1==head)//要删除的结点是头结点
{
head=p1->next;
}
else
{
p2->next=p1->next;
}
cout<<"成功删除!!";
}
p2=p1;
p1=p1->next;
}
return head;
}
int save_info(char filename,STUDENT head,int flag)
//功能:将链表按Binary写入文件末尾
//参数:
//1filename文件名,绝对地址
//2head指向链表的头结点
//3flag 0追加或1覆盖数据
//返回值:失败则返回0
{
system("cls");
FILE fp;
STUDENT p;
char openmethod[8];
if(flag==0)
{
strcpy(openmethod,"ab+");//追加
}
else
{
strcpy(openmethod,"w");//覆盖
}
if(NULL==(fp=fopen(filename,openmethod)))//
{
cout<<"数据库连接失败"<<endl;
Sleep(DELAYTIME);
return 0;
}
else
{
for(p=head;p;p=p->next)
{
if((fwrite(p,sizeof(STUDENT),1,fp))==NULL)
{
cout<<"数据库创建失败"<<endl;
return 0;
}
}
}
fclose(fp);
return 1;
}
int find_infile_printf(char filename)
//功能:根据学号和姓名来查询某个学生
//参数:filename数据库文件
//返回值:失败返回0
//直接搜索文件,缺点是速度慢
//也可先根据文件创建链表,再搜索链表,缺点是如果文件较大,占用内存多
{
system("cls");
FILE fp;
STUDENT stu;
int num;
char stu_name[64];
char ch;
if(filename==NULL)
{
return 0;
}
do
{
memset(stu_name,0,sizeof(stu_name));
cout<<"查询学号或查询姓名? 1查询学号 0查询姓名";
//flag=1根据学号来查询,flag=0根据姓名来查询
cin>>num;
if(num==1)
{
cout<<"输入要查询的学号:";
cin>>num;
cout<<"正在为您查询学号为"<<num<<"的学生……"<<endl;
}
else if(num==0)
{
cout<<"输入要查询的姓名:";
cin>>stu_name;
cout<<"正在为您查询姓名为"<<stu_name<<"的学生……"<<endl;
}
else
{
cout<<"输入有误"<<endl;
return 0;
}
if(NULL==(fp=fopen(filename,"rw")))
{
cout<<"数据库连接失败\n";
return 0;
}
else
{
while(fread(&stu,sizeof(STUDENT),1,fp)!=NULL)
{
if(strcmp(stuname,stu_name)==0||stunum==num)
{
cout<<"学号\t姓名\t性别\t数学\t英语\t政治\t语文\t总成绩\n";
//输出该学生的所有信息
cout<<stunum<<"\t"<<stuname<<"\t"<<stusex<<"\t"<<stumath<<"\t"<<stuenglish<<"\t"<<stupolitic<<"\t"<<stuchinese<<"\t"<<stutotal<<endl;
//不加break;可支持多个相同数据的索引
}
}
}
cout<<"##########################查询完毕#########################\n";
cout<<"查询另一个学生的信息? Y/N\t";
cin>>ch;
}while(ch=='Y'||ch=='y');
fclose(fp);
return 1;
}
int pri_whole_link(STUDENT head)
//功能:显示整条链表的学生信息
//参数:head 头结点指针,如果head为空,返回空
{
system("cls");
STUDENT p;
if (head==NULL)
{
cout<<"数据库未加载"<<endl;
Sleep(DELAYTIME);
return 0;
}
cout<<"学号\t姓名\t性别\t数学\t英语\t政治\t语文\t总成绩\n";
for(p=head;p;p=p->next)
{
cout<<p->num<<"\t"<<p->name<<"\t"<<p->sex<<"\t"<<p->math<<"\t"<<p->english<<"\t"<<p->politic<<"\t"<<p->chinese<<"\t"<<p->total<<endl;
}
return 1;
}
STUDENT printf_sort(STUDENT head)
//功能:根据学号|某科目成绩|总成绩对链表进行排序,然后输出
//参数:head链表头指针,如果head为空,返回空
//返回值:返回新的链表的头结点指针
{
system("cls");
STUDENT p1,p2,ptemp,pfinished=NULL;
int num;
int flag;
if (head==NULL)
{
return 0;
}
cout<<"选择排序依据 0数学成绩1英语成绩2政治成绩3语文成绩4总成绩\n";
cin>>num;
// cout<<"升序/降序输出? 0升序1降序";
// cin>>flag;
for(p1=head;p1->next!=pfinished;)//对链表进行从大到小排序(这里用冒泡法)
//p1使之总是指向头结点,pfinished使之总是指向已排序好的最前面的结点
//ptemp作为中介,保存p2的上一个结点
{
for(p2=p1;p2->next!=pfinished;)
{
if((&(p2->math)+num)<(&(p2->next->math)+num))//p2的值小于p2->next的值,交换 ptemp p2 p2->next
{
if(p2==p1)//头结点要交换
{
p1=p2->next;
p2->next=p1->next;
p1->next=p2;
ptemp=p1;
}
else
{
ptemp->next=p2->next;
ptemp=p2->next;
p2->next=ptemp->next;
ptemp->next=p2;
}
}
else//不需要交换,则p2、ptemp前进1位
{
ptemp=p2;
p2=p2->next;
}
}
pfinished=p2;
}
// if(flag==1)
// {
pri_whole_link(p1);
// }
// else
// {
// }
cout<<"##########################信息显示完毕#########################\n";
return p1;
}
void free_link(STUDENT head)
//释放链表空间,如果head,什么都不做
{
STUDENT p1,p2;
for(p1=head;p1;p1=p2)
{
p2=p1->next;//先保存,否则
free(p1);//free后 p1->next数据丢失
}
}
#include <iostreamh>
class sc
{
public:
sc();
sc(int);
sc(const sc &);
~sc(){}
void setradius(int);
int getradius()const;
private:
int itsradius;
};
sc::sc()
{
itsradius=new int;
itsradius=0;
}
sc::sc(int radius)
{
itsradius=new int;
itsradius=radius;
}
sc::sc(const sc &rhs)
{
int val=rhsgetradius();
itsradius=new int;
itsradius=rhsitsradius;
}
int sc::getradius()const{return itsradius;}
int main()
{
sc one,two(9),tree(two);
cout<<"one"<<onegetradius()<<endl;
cout<<"two"<<twogetradius()<<endl;
cout<<"two"<<treegetradius()<<endl;
return 0;
}
itsradius=new int(5)语句的意思是为itsradius开辟能存放5个int型的空间,而你想要的应该是为itsradius开辟一个int的空间,在将5存放进去吧……不知道怎么回事,字体出了问题,有不懂的追问吧
#include <iostream>
#include______ //看见下面的fstream没 所以这里是#include <QStream>
using namespace std;
void main( )
{
fstream fin,fout;
fout.open("my.txt",ios::out); //打开文件
if(! fout.is_open( ))
return;
for(int i=0;i<3;i=i+1) //输出line的号
fout<<"This is line"<<i+1<<endl;
fout.close( );
fin.open("my.txt",ios::in); //打开文件
if(! fin.is_open( ))
return;
char str[100];
while(______) /把文件东西读入到str知道文件结束 所以 判断文件结束的一个东东忘记是什么函数了,哥又不是百度,哥可以查msdn至此,后面不看了,出这道题的人傻逼,肯定不是一个公司程序员!/
{
fin.getline(str,100);
cout<<str<<endl;
}
fin.close( );
}
50.求两个浮点数之差的cha函数的原型声明、调用方法。
#include <iostream>
using namespace std;
void main( )
{
float a,b;
______;∥函数cha的原型声明 float cha( float x, float y );
a=12.5;
b=6.5;
float c=__________;∥调用函数cha cha( a, b );
cout<<c<<endl;
}
float cha(float x,float y)
{
float w;
w=x-y;
return w;
}
后面的不看了,上面两道题第一道题够二,第二道题你自己看书就能解决
/
题目1:
输入一批字符串(不超过30条),以字符串“end”作为输入结束标志,请按要求编程完成下述功能:
1)字符串输入;
2)输出最大、最小的字符串及其位置;
3)对字符串进行升序排列;
4)插入一条字符串,结果仍按升序排列;
5)查找指定字符串的位置;
6)删除指定的字符串。
要求:
1)上述各功能请分别用函数实现;
2)输入输出要有必要的提示说明
/
#include <iostream>
#include<string>
#include<stdlibh>
using namespace std;
void input();//字符串输入
void outputMaxMinAndItsLocation();//输出最大、最小的字符串及其位置
void orderByAesc();//对字符串进行升序排列
void insertString();//插入一条字符串,结果仍按升序排列
bool selectString();//查找指定字符串的位置
void deleteString();//删除指定的字符串
void print(); //输出所有字符串
string str[30];//定义一个不超过30个字符串的字符串数组
int size=0;
void input()
{
size=0;
int i=0;
cout<<endl<<"输入字符串,以输入'end'结束:"<<endl;
while(i<30)
{
cout<<"字符串"<<i+1<<":";
cin>>str[i];
if(str[i]=="end")
{
break;
}
size++;
i++;
}
}
void outputMaxMinAndItsLocation()
{
string max=str[0],min=str[0];
int maxLocation=0,minLocation=0;
int i=1;
while(i<size)
{
if(minlength()>str[i]length())
{
min=str[i];
minLocation=i;
}
else if(maxlength()<str[i]length())
{
max=str[i];
maxLocation=i;
}
i++;
}
cout<<endl<<"最大字符串:"<<max<<" "<<"位置:"<<maxLocation<<endl;
cout<<"最小字符串:"<<min<<" "<<"位置:"<<minLocation<<endl;
}
void orderByAesc()
{
string temp;
for(int i=0;i<size;i++)
for(int j=i+1;j<size;j++)
{
temp=str[i];
if(str[i]>str[j])
{
str[i]=str[j];
str[j]=temp;
}
}
}
void insertString()
{
string temp;
cout<<"请输入想要插入的字符串:";
cin>>temp;
str[size]=temp;
size++;
orderByAesc();//升序排序
}
bool selectString()
{
cout<<"请输入想要查找的字符串:";
string temp;
cin>>temp;
for(int i=0;i<size;i++)
{
if(str[i]==temp)
{
cout<<"存在该字符串,位于"<<i<<endl;
return true;
}
else if(i==size-1)
{
cout<<"不存在该字符串"<<endl;
}
}
return false;
}
void deleteString()
{
cout<<"请输入想要删除的字符串:";
string temp;
cin>>temp;
for(int i=0;i<size;i++)
{
if(str[i]==temp)
{
for(int j=i;j<size;j++)
str[j]=str[j+1];
size--;
}
}
}
void print()
{
cout<<endl<<"输出所有字符串!!"<<endl<<endl;
for(int i=0;i<size;i++)
cout<<"字符串"<<i+1<<":"<<str[i]<<endl;
cout<<endl<<"输出完毕!!"<<endl<<endl;
}
int main()
{
int choice;
while(1)
{
cout<<endl<<""<<endl;
cout<<"\t1:输入字符串"<<endl;
cout<<"\t2:输出最大、最小的字符串及其位置"<<endl;
cout<<"\t3:对字符串进行升序排列"<<endl;
cout<<"\t4:插入一条字符串,结果仍按升序排列"<<endl;
cout<<"\t5:查找指定字符串的位置"<<endl;
cout<<"\t6:删除指定的字符串"<<endl;
cout<<"\t7:输出所有字符串"<<endl;
cout<<"\t0:退出"<<endl;
cout<<""<<endl;
cout<<"请输入你要进行的 *** 作:";
cin>>choice;
switch(choice)
{
case 0:cout<<"退出!!"<<endl;exit(0);break;
case 1:input();break;
case 2:outputMaxMinAndItsLocation();break;
case 3:orderByAesc();cout<<"升序排序完毕"<<endl;break;
case 4:insertString();break;
case 5:selectString();break;
case 6:deleteString();break;
case 7:print();break;
default:cout<<"输入错误!!!"<<endl;
}
}
return 0;
}
最简单的例子。#include <iostream>using namespace std;class Time //定义Time类{public : //数据成员为公用的int hour;int minute;int sec;};int main( ){Time t1;//定义t1为Time类对象cin>>t1hour;//输入设定的时间cin>>t1minute;cin>>t1sec;//输出时间:cout<<t1hour<<":"<<t1minute<<":"<<t1sec<<endl;return 0;}
运行情况如下:
1232 43↙
12:32:43
几点注意:
1) 在引用数据成员hour,minute,sec时不要忘记在前面指定对象名。
2) 不要错写为类名,如写成
Timehour,Timeminute,Timesec
是不对的。因为类是一种抽象的数据类型,并不是一个实体,也不占存储空间,而对象是实际存在的实体,是占存储空间的,其数据成员是有值的,可以被引用的。
3) 如果删去主函数的3个输入语句,即不向这些数据成员赋值,则它们的值是不可预知的。
#include<iostream>
using namespace std;
int main(int argc,char argv[])
{
cout<<"long int: "<<sizeof(long int)<<" byte "<<sizeof(long int)8<<" bits"<<endl;
cout<<"int: "<<sizeof(int)<<" byte "<<sizeof(int)8<<" bits"<<endl;
cout<<"char: "<<sizeof(char)<<" byte "<<sizeof(char)8<<" bits"<<endl;
cout<<"bool: "<<sizeof(bool)<<" byte "<<sizeof(bool)8<<" bits"<<endl;
cout<<"float: "<<sizeof(float)<<" byte "<<sizeof(float)8<<" bits"<<endl;
cout<<"double: "<<sizeof(double)<<" byte "<<sizeof(double)8<<" bits"<<endl;
cout<<"long double: "<<sizeof(long double)<<" byte "<<sizeof(long double)8<<" bits"<<endl;
return 0;
}
以上就是关于c语言程序设计全部的内容,包括:c语言程序设计、c++程序设计、我有些C++程序设计的题不会做,请大仙帮我指点,我将不胜感激,跪谢!!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)