
//头文件的定义
#ifndef PEOPLE_H
#define PEOPLE_H
#include<string>
using namespace std;
class people{
public: //提供所有对数据对象的读取和修改接口。
people(string n,string p,string b,string a){ //构造函数也可以通过调用相干的接口函数实现
name=n;
phone=p;
birthday=b;
address=a;
}
string getName(){
return name;
}
string getPhone(){
return phone;
}
string getBirthday(){
return birthday;
}
string getAddress(){
return address;
}
void setName(string n){
name=n;
}
void setPhone(string p){
phone=p;
}
void setBirthday(string b){
birthday=b;
}
void setAddress(string a){
address=a;
}
/下面定义了PEOPLE对象的基本信息,这里全采用string类型以便于数据的处理,当然也可以使用其它的数据类型,为了简便明了,我们使用了全字符串型数据/
private:
string name;
string phone;
string birthday;
string address;
};
#endif
//DOS界面下的程序实现:
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include "peopleh"
#include <list>
using namespace std;
int enterChoice();
void getRecord(fstream&);
void updateRecord(fstream&);
void newRecord(fstream&);
void deleteRecord(fstream&);
void findRecord(fstream&);
/程序将使用C++数据结构中的链表来存储运行过程中使用到的PEOPLE对象,因为一个通讯录的内容不可能很大,所以可以从文件中把所有的资料读取到内存中,然后使用我们定义的LIST链表来实现对信息的 *** 作,最后在退出程序之前进行UPDATERECORD *** 作,便可以实现对最终数据的保存。这个就是该程序对相关信息和数据的处理模式。/
list<people> peopleList;
list<people>::iterator iter;
enum Choices{ GETRECORD=1,UPDATERECORD,NEWRECORD,DELETERECORD,FIND,END};
int main(){
ofstream out("peopledat",ios::out);
if(!out){
cerr<<"no"<<endl;
exit(1);
}
fstream inout("peopledat",ios::in|ios::out);//我们把通讯录信息都存储在“peopledat”文件中
if(!inout){
cerr<<"File could not be opened!"<<endl;
exit(1);
}
int choice;
//在程序中设置不同的 *** 作接口,使程序简单明了。
while((choice=enterChoice())!=END){
switch(choice){
case GETRECORD:
getRecord(inout);
break;
case UPDATERECORD:
updateRecord(inout);
break;
case NEWRECORD:
newRecord(inout);
break;
case DELETERECORD:
deleteRecord(inout);
break;
case FIND:
findRecord(inout);
break;
default:
cerr<<"Incorrect choice!\n"<<endl;
break;
}
inoutclear();
}
inoutclose();
return 0;
}
int enterChoice(){
cout<<"\nEnter your choice"<<endl
<<"1 - to get all the records\n"
<<"2 - to update the record\n"
<<"3 - to add a new record\n"
<<"4 - to delete a record\n"
<<"5 - to find a record\n"
<<"6 - to end the program\n"<<endl;
int menuChoice;
cin>>menuChoice;
return menuChoice;
}
/这个该程序中的内存数据初始化和更新函数,如果是第一次运行,从文件中读取每一个联系人的信息并添加到peopleList中(用于存储所有联系人信息的链表类),并将他们打印;如果不是第一次运行使用该功能,则负责信息的更新,这时需要判断链表内容是否为空,如果为空,则将d出其中的所有记录,再从新读取文件的信息,重新构建一个信息列表。/
void getRecord(fstream& readFromFile){
readFromFileseekg(0);
readFromFilegood();
people p("","","","");
while(!peopleListempty()){
peopleListpop_front();
}
while(!readFromFileeof()){
readFromFileread(reinterpret_cast<char>(&p),sizeof(people));
peopleListpush_back(p);
}
cout<<"the records are as follows:"<<endl;
iter=peopleListbegin();
while(iter!=peopleListend()){
cout<<setw(5)<<(iter)getName()<<setw(5)
<<(iter)getPhone()<<setw(5)
<<(iter)getBirthday()<<setw(10)
<<(iter)getAddress()<<endl;
iter++;
}
}
//该函数负责将内存中的所有联系人信息(更改或变动后的信息)重新写入文件并覆盖原信息
void updateRecord(fstream& update){
updateseekg(0);
iter=peopleListbegin();
while(iter!=peopleListend()){
updatewrite(reinterpret_cast<const char>(&(peopleListfront())),sizeof(people));
iter++;
}
updateflush();
cout<<"Update finished!"<<endl;
}
void newRecord(fstream& n){
people np("","","","");
string name;
string phone;
string birthday;
string address;
cout<<"Enter name:"<<endl;
cin>>name;
cout<<"Enter phone:"<<endl;
cin>>phone;
cout<<"Enter birthday:"<<endl;
cin>>birthday;
cout<<"Enter address:"<<endl;
cin>>address;
npsetName(name);
npsetPhone(phone);
npsetBirthday(birthday);
npsetAddress(address);
bool lable=0; //设置一个标签,防止最大关键字的对象无法插入。
iter=peopleListbegin();
while(iter!=peopleListend()){
if(npgetName()<(iter)getName()){
peopleListinsert(iter,np);
lable=1;
break;
}
else iter++;
}
if(lable==0){
peopleListpush_back(np);
}
cout<<"Finished!"<<endl;
}
void deleteRecord(fstream& f){
string name;
bool lable=0;
cout<<"Enter the people's name you want to delete:"<<endl;
cin>>name;
iter=peopleListbegin();
while(iter!=peopleListend()){
if((iter)getName()==name){
cout<<"Found! deleting"<<endl;
peopleListerase(iter);
lable=1;
cout<<"Finished!"<<endl;
break;
}
iter++;
}
if(lable==0){
cout<<"NO this people!"<<endl;
}
}
void findRecord(fstream& i){
string name;
bool lable=0;
cout<<"Enter the people's name you want to find:"<<endl;
cin>>name;
iter=peopleListbegin();
while(iter!=peopleListend()){
if((iter)getName()==name){
cout<<setw(5)<<(iter)getName()<<setw(5)
<<(iter)getPhone()<<setw(5)
<<(iter)getBirthday()<<setw(10)
<<(iter)getAddress()<<endl;
lable=1;
break;
}
iter++;
}
if(lable==0){
cout<<"No this person!"<<endl;
}
}
这个其实不是很难 就是输出日历 仔细看每一句话就明白了
#include <stdioh>
int leap (int year)
{if(year%4==0&&year%100!=0||year%400==0) //判断是否是闰年
return 1;
else return 0;
}
int days_month (int month,int year) //判断大月和小月
{
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) //找出大月
return 31;
if(month==4||month==6||month==9||month==11) //找出小月
return 30;
if(month==2&&leap(year)==1) return 29; //判断二月是29天还是29天
else return 28;
}
int firstday(int month,int year)
{int w;
w=(1+2month+3(month+1)/5+year+year/4+year/400-year/100)%7+1; //判断每个月开始的第一天是星期几
return w;
}
main()
{int i,j=1,k=1,a,b,month,year;
printf("\n input month and year:\n");
scanf("%d%d",&month,&year); //输入月和年
b=days_month(month,year);
a=firstday (month,year);
printf(" Sun Mon Tue Wed Thu Fri Sat \n"); //输出对应当月的日历
if(a==7)
{for(i=1;i<=b;i++)
{printf("%4d",i);
if(i%7==0)
{printf("\n");
}
}
}
if(a!=7)
{while (j<=4a)
{printf(" ");
j++;
}
for(i=1;i<=b;i++)
{printf("%4d",i);
if(i==7k-a)
{printf("\n");
k++;
}
}
}
printf("\n");
}
这个 程序不光只统计了小写字母,还有大写字母,数字和空格的个数:
void fun(char s, int num)
{
int length;
int index;
int sum_number = 0;
int sum_char = 0;
int sum_spac = 0;
int sum_CHAR = 0;
length = strlen(s);
for (index = 0; index < length; index++)
{
if ((s >= '0') && (s <= '9') )
{
sum_number++;
}
if ((s >= 'a') && (s < 'z') )
{
sum_char++;
}
if ((s >= 'A') && (s <= 'Z') )
{
sum_CHAR++;
}
if (s == 0x20 )
{
sum_spac++;
}
s++;
}
num[0] = sum_number;
num[1] = sum_CHAR;
num[2] = sum_char;
num[3] = sum_spac;
}
int main()
{
char testarry[50];
int num[4];//用来放数字num[0],num[1]大写字母,num[2]小写字母,num[3]空格数字的个数
//num = (int )malloc(sizeof(int) 4);
printf("请输入字符串:");
gets(testarry);
fun(testarry,num);
// printf("%s",testarry);
printf("数字的个数:%d\n大写字母的个数:%d\n小写字母的个数:%d\n空格数字的个数:%d\n",
num[0],num[1],num[2],num[3]);
return 0;
}
#include "stdioh"
#include <stdlibh>
#include "timeh"
int main(int argv,char argc[]){
int x,t,y;
srand((unsigned)time(NULL));
printf("Please guess the number(int 1~100, other end)\n");
while(x=rand()%100+1,t=0,1)
while(++t){
if(scanf("%d",&y)!=1 || y<1 || y>100){
printf("You have chosen to quit\n");
return 0;
}
if(y>x)
printf("Your answer is HIGH,try again\n");
else if(y<x)
printf("Your answer is LOW,try again\n");
else{
if(t<=7){
printf("Congratulation!\n");
break;
}
else if(t>7 && t<15){
printf("I can bet you can do it better\n");
break;
}
else if(t>=15)
exit(0);
}
}
return 0;
}
运行样例:
#include <timeh>
#include<stdioh>
#include<conioh>
#include <stdlibh>
#include<stringh>
#define MAX 80
void input();
void sort();
void display();
void insert();
void del();
void average();
void find();
void save();
void read();
void del_file();
void average();
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;
start: printf("\n\t\t\t欢迎使用学生成绩管理系统\n");
/一下为功能选择模块/
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");
printf("\t\t\t\t选择功能选项:");
fflush(stdin);
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");insert();break;
case 5:system("cls");del();break;
case 6:system("cls");modify();break;
case 7:system("cls");find();break;
case 8:system("cls");read();break;
case 9:system("cls");del_file();break;
case 10:system("cls");save();break;
case 11:system("exit");exit(0);
default:system("cls");goto start;
}
}while(1);
/至此功能选择结束/
}
void input()/原始数据录入模块/
{
int i=0;
char ch;
do
{
printf("\t\t\t\t1录入学员信息\n输入第%d个学员的信息\n",i+1);
printf("\n输入学生编号:");
scanf("%d",&stu[i]no);
fflush(stdin);
printf("\n输入学员姓名:");
fflush(stdin);
gets(stu[i]name);
printf("\n输入学员性别:");
fflush(stdin);
gets(stu[i]sex);
printf("\n输入学员成绩1:");
fflush(stdin);
scanf("%f",&stu[i]score1);
printf("\n输入学员成绩2:");
fflush(stdin);
scanf("%f",&stu[i]score2);
printf("\n输入学员成绩3:");
fflush(stdin);
scanf("%f",&stu[i]score3);
printf("\n\n");
i++;
now_no=i;
printf("是否继续输入(Y/N)");
fflush(stdin);
ch=getch();
system("cls");
}
while(ch!='n'&&ch!='N');
system("cls");
}
void sort()/排序数据函数/
{
struct student temp;
int i,j;
average();
for(i=1;i<now_no;i++)
{
for(j=1;j<=now_no-i;j++)
{
if(stu[j-1]ave<stu[j]ave)
{
temp=stu[j];
stu[j]=stu[j-1];
stu[j-1]=temp;
}
}
}
}
void display()/显示数据函数/
{
int i;
char as;
average();
do
{
printf("\t\t\t班级学员信息列表\n");
printf("\t编号\t姓名\t性别\t成绩1\t成绩2\t成绩3\t平均值\n");
for(i=0;i<now_no&&stu[i]name[0];i++)printf("\t%d\t%s\t%s\t%2f\t%2f\t%2f\t%2f\n",stu[i]no,stu[i]name,stu[i]sex,stu[i]score1,stu[i]score2,stu[i]score3,stu[i]ave);
printf("\t\t按任意键返回主菜单");
fflush(stdin);
as=getch();
}
while(!as);
system("cls");
}
void insert()/插入数据函数/
{
char ch;
do
{
printf("\n\t\t输入新插入学员队信息\n");
printf("\n输入学生编号:");
scanf("%d",&stu[now_no]no);
fflush(stdin);
printf("\n输入学员姓名:");
fflush(stdin);
gets(stu[now_no]name);
printf("\n输入学员性别:");
fflush(stdin);
gets(stu[now_no]sex);
printf("\n输入学员成绩1:");
fflush(stdin);
scanf("%f",&stu[now_no]score1);
printf("\n输入学员成绩2:");
fflush(stdin);
scanf("%f",&stu[now_no]score2);
printf("\n输入学员成绩3:");
fflush(stdin);
scanf("%f",&stu[now_no]score3);
printf("\n\n");
now_no=now_no+1;
sort();
printf("是否继续输入(Y/N)");
fflush(stdin);
ch=getch();
system("cls");
}
while(ch!='n'&&ch!='N');
}
void del()/删除数据函数/
{
int inum,i,j;
printf("输入要删除学员的编号:");
fflush(stdin);
scanf("%d",&inum);
for(i=0;i<now_no;i++)
{
if(stu[i]no==inum)
{
if(i==now_no)now_no-=1;
else
{
stu[i]=stu[now_no-1];
now_no-=1;
}
sort();
break;
}
}
system("cls");
}
void save()/保存数据函数/
{
FILE fp;
int i;
char filepath[20];
printf("输入要保存的文件路径:");
fflush(stdin);
gets(filepath);
if((fp=fopen(filepath,"w"))==NULL)
{
printf("\n保存失败!");
exit(0);
}
for(i=0;i<now_no;i++)
{
stu[i]sum=stu[i]score1+stu[i]score2+stu[i]score3;
stu[i]ave=stu[i]sum/3;
fprintf(fp,"\t%d\t%s\t%s\t%2f\t%2f\t%2f\t%2f\n",stu[i]no,stu[i]name,stu[i]sex,stu[i]score1,stu[i]score2,stu[i]score3,stu[i]ave);
}
fclose(fp);
printf("学生信息已保存在%s中!\n",filepath);
system("pause");
system("cls");
}
void find()/查询函数/
{
int i;
char str[20],as;
do
{
printf("输入要查询的学生姓名:");
fflush(stdin);
gets(str);
for(i=0;i<now_no;i++)
if(!strcmp(stu[i]name,str))
{
printf("\t编号\t姓名\t性别\t成绩1\t成绩2\t成绩3\t平均值\n");
printf("\t%d\t%s\t%s\t%2f\t%2f\t%2f\t%2f\n",stu[i]no,stu[i]name,stu[i]sex,stu[i]score1,stu[i]score2,stu[i]score3,stu[i]ave);
}
printf("\t\t按任意键返回主菜单");
fflush(stdin);
as=getch();
}
while(!as);
system("cls");
}
void average()/求平均数/
{
int i;
for(i=0;i<now_no;i++)
{
stu[i]sum=stu[i]score1+stu[i]score2+stu[i]score3;
stu[i]ave=stu[i]sum/3;
}
}
void modify()/修改数据函数/
{
int i;
char str[20],as;
printf("输入要修改的学生姓名:");
fflush(stdin);
gets(str);
for(i=0;i<now_no;i++)
if(!strcmp(stu[i]name,str))
{
system("cls");
printf("\n\t\t输入新插入学员队信息\n");
printf("\n输入学生编号:");
fflush(stdin);
scanf("%d",&stu[i]no);
printf("\n输入学员性别:");
fflush(stdin);
gets(stu[i]sex);
printf("\n输入学员成绩1:");
fflush(stdin);
scanf("%f",&stu[i]score1);
printf("\n输入学员成绩2:");
fflush(stdin);
scanf("%f",&stu[i]score2);
printf("\n输入学员成绩3:");
fflush(stdin);
scanf("%f",&stu[i]score3);
printf("\n\n");
sort();
break;
}
system("cls");
}
void read()
{
FILE fp;
int i;
char filepath[20];
printf("输入要读入的文件路径:");
fflush(stdin);
gets(filepath);
if((fp=fopen(filepath,"r"))==NULL)
{
printf("找不到%s文件!\n",filepath);
system("pause");
exit(0);
}
now_no=0;
for(i=0;i<MAX&&!feof(fp);i++)
{
fscanf(fp,"\t%d\t%s\t%s\t%f\t%f\t%f\t%f\n",&stu[i]no,stu[i]name,stu[i]sex,&stu[i]score1,&stu[i]score2,&stu[i]score3,&stu[i]ave);
now_no++;
}
fclose(fp);
printf("保存的在文件%s中的所有信息已经读入!\n",filepath);
system("pause");
system("cls");
}
void del_file()
{
FILE fp;
char filepath[20];
printf("输入要删除的文件路径:");
fflush(stdin);
gets(filepath);
fp=fopen(filepath,"w");
fclose(fp);
printf("保存的在文件%s中的所有信息已经删除!\n",filepath);
system("pause");
system("cls");
}
自己改改就好了 谢谢 给分哦
之前写过的,你可以拿去参考
#include<stdioh>
#include<stringh>
#include<stdlibh>
typedef struct guest
{
int number;
char name[10];
int sum;
char time[5];
struct guest next;
}GuestLink,Pointer;
GuestLink stu[10];
int i,j,k;
void Insert(Pointer Head);
void Search(Pointer Head);
void Update(Pointer Head);
void Delete(Pointer Head);
void Show(Pointer Head);
void Sort(Pointer Head);
void Save(Pointer Head);
void Put(Pointer Head);
int main()
{
Pointer Head=NULL;
int i;
do{
printf("
");
printf("1---增加订餐客户信息
");
printf("2---查询订餐客户信息
");
printf("3---修改订餐客户信息
");
printf("4---删除订餐客户信息
");
printf("5---浏览客户订餐信息
");
printf("6---按照用餐时间升序排序
");
printf("7---保存订餐信息到数据文件
");
printf("8---查看数据文件中的订餐信息
");
printf("9---退出
");
printf("
");
printf("请选择1--9:");
scanf("%d",&i);
switch(i)
{
case 1:Insert(&Head);
break;
case 2:Search(Head);
break;
case 3:Update(Head);
break;
case 4:Delete(&Head);
break;
case 5:Show(Head);
break;
case 6:Sort(Head);
break;
case 7:Save(Head);
break;
case 8:Put(Head);
break;
case 9:
break;
default:printf("选择错误!请重新选择!");
break;
}
}while(i!=9);
return 0;
}
void Insert(Pointer Head)
{
int in_number;
Pointer p,q,r;
printf("请输入编号:
");
scanf("%d",&in_number);
p=q=Head;
while(p!=NULL)
{
if(p->number==in_number)
{
printf("已经有相同编号:");
return;
}
else
{
q=p;p=p->next;
}
}
r=(Pointer)malloc(sizeof(GuestLink));//没有号
r->next=NULL;
if(r==NULL)
{
printf("分配空间失败");
return;
}
if(q==NULL)//如果是空表,判断空表用q!!!!
Head=r;
else
{q->next=r;}
r->number=in_number;
printf("请输入姓名:
");
scanf("%s",r->name);
printf("请输入人数:
");
scanf("%d",&r->sum);
printf("请输入时间:
");
scanf("%s",r->time);
}
/
void Insert(Pointer Head)
{int in_number;
Pointer p,q,r;
p=q=Head;
printf("请输入号码:");
scanf("%d",&in_number);
while(p!=NULL)
{
if(in_number==p->number)
{printf("已存在号码!");}
else
{q=p;p=p->next;}
}
r=(Pointer)malloc(sizeof GuestLink);
r->next=NULL;
if(q==NULL)
Head=r;
else
q->next=r;
printf("请输入姓名:");
scanf("%s",r->name);
printf("请输入人数");
scanf("%f",&r->sum);
printf("请输入时间");
scanf("%s",r->time);
}/
void Search(Pointer Head)
{
int flag=1;
int number;
Pointer p;
printf("请输入要查询的编号:");
scanf("%d",&number);
p=Head;
while(p!=NULL&&flag)
{
if(p->number==number)
{ printf("编号\t姓名\t人数\t时间
");
printf("%s\t",p->name);
printf("%d\t",p->sum);
printf("%s\t
",p->time);
flag=0;
}
else
p=p->next;
}
if(flag)
printf("没有查询到!");
}
/
void Search(Pointer Head)
{
int flag=0;
int number;
Pointer p;
p=Head;
printf("请输入您要查找的编号:");
scanf("%f",&number);
while(p!=NULL&&flag)
{
if(p->number==number)
{
printf("已查询到您要的编号");
flag=0;
}
else
{
p=p->next;
}
}
if(flag==1)
{printf("姓名:%s",p->name);
printf("编号:%f",p->number);
printf("人数:%f",p->sum);
printf("时间:%s",p->time);
}
else
{printf("没有查询到您要查询的编号!");}
}
/
void Update(Pointer Head)
{
int flag=1;
int number;
Pointer p;
printf("请输入要修改的编号:");
scanf("%d",&number);
p=Head;
while(p!=NULL&&flag)
{
if(p->number==number)
{
printf("请输入人数:");
scanf("%d",&p->sum);
printf("请输入用餐时间:");
scanf("%s",p->time);
flag=0;
}
else
p=p->next;
}
if(flag)
printf("没有找到要修改的记录!");
}
//update与查询过程相似!!!
void Delete(Pointer Head)
{
int flag=1;
int number;
Pointer p,q;
printf("请输入要删除的数据编号:");
scanf("%d",&number);
p=q=Head;
while(p!=NULL&&flag)
{
if(p->number==number)
{
if(p==Head)
{
Head=p->next;free(p);//删除结点后要及时释放内存!!!
}
else
{q->next=p->next;free(p);}
flag=0;
}
else
{q=p;p=p->next;}
}
if(flag)
printf("没有找到可以删除的数据!!");
}
/
void Delete(Pointer Head)
{
Pointer p,q;
p=q=Head;
int number;
int flag=1;
printf("请输入您要删除的结点:");
scanf("%d",&number);
while(p!=NULL)
{
if(p->number==number)
{ if(p==Head)
{
Head=p->next;free(p);
}
else
{
q->next=p->next;free(p);
}
flag=0;
}
else
{
q=p;p=p->next;
}
}
if(flag)
{printf("没有找到要删除的数据!");}
}
/
void Show(Pointer Head)
{
Pointer p;
p=Head;
printf("编号\t姓名\t人数\t用餐时间
");
while(p!=NULL)
{
printf("%d\t",p->number);
printf("%s\t",p->name);
printf("%d\t",p->sum);
printf("%s\t
",p->time);
p=p->next;
}
}
void Sort(Pointer Head)
{
//三个for循环,第一个赋给结构数组 第二个排序,第三个输出
Pointer p;
p=Head;
int count=0;
GuestLink temp;
for(i=0;p!=NULL;i++)
{
strcpy(stu[i]name,p->name);
stu[i]number=p->number;
stu[i]sum=p->sum;
strcpy(stu[i]time,p->time);
count++;
p=p->next;
}
for(i=0;i<count-1;i++)
{
k=i;
for(j=i+1;j<count;j++)
if(strcmp(stu[j]time,stu[k]time)<0)k=j;
if(k!=i)
{temp=stu[i];stu[i]=stu[k];stu[k]=temp;}//一个字都不能改!!!!
//{temp=stu[k];stu[k]=stu[i];stu[i]=temp;}
}
printf("编号\t姓名\t人数\t用餐时间
");
for(i=0;i<count;i++)
{
printf("%d\t",stu[i]number);
printf("%s\t",stu[i]name);
printf("%d\t",stu[i]sum);
printf("%s\t
",stu[i]time);
}
}
/Head=p=stu;
while(p!=NULL)
{
printf("姓名:%-10s",p->name);
printf("人数:%-10d",p->sum);
printf("用餐时间:%-10s",p->time);
printf("编号:%-10d
",p->number);
p=p->next;
}/
/
void Sort(Pointer Head)
{
Pointer p;
p=Head;
GuestLink temp;
count=0;
while(p!=NULL)
{p=p->next;
count++;
}
p=Head;
while(p!=NULL)
{for(i=0;i<count;i++)
{
stu[i]number=p->number;
strcpy(stu[i]name,p->name);
stu[i]sum=p->sum;
strcpy(stu[i]time,p->time);
}
p=p->next;
}
for(i=0;i<count-1;i++)
{
k=i;
for(j=0;j<count;j++)
{if(strcmp(stu[j]time,stu[k]time)<0)k=j;
if(k!=i)
{temp=stu[k];stu[k]=stu[i];temp=stu[i];}
}
}
}
/
void Save(Pointer Head)
{
Pointer p;
FILE fp;
p=Head;
for(i=0;p!=NULL;i++)
{
strcpy(p->name,stu[i]name);
p->number=stu[i]number;
p->sum=stu[i]sum;
strcpy(p->time,stu[i]time);
p=p->next;
}
if((fp=fopen("stud","w"))==NULL)
{printf("can't open !");}
p=Head;
while(p!=NULL)
{
if(fwrite(p,sizeof(GuestLink),1,fp)!=1)
printf("can't write!
");
p=p->next;
}
fclose(fp);
}
/
void Save(Pointer Head)
{
FILE fp;
Pointer p;
p=Head;
for(i=0;p!=NULL;i++)
{
stu[i]number=p->number;
strcpy(stu[i]name,p->name);
stu[i]sum=p->sum;
strcpy(stu[i]time,p->time);
p=p->next;
}
p=Head;
if((fp=fopen("stud","w"))==NULL)
{
printf("cam't open the file");
}
for(i=0;i<count;i++)
if(fwrite(p,sizeof(GuestLink),1,fp)!=1)
{
printf("cant write");
}
fclose(fp);
}
/
void Put(Pointer Head)
{
FILE fp;
Pointer p;
p=Head;
if((fp=fopen("stud","r"))==NULL)
{printf("can't open the File
");}
printf("编号\t姓名\t人数\t用餐时间
");
while(p!=NULL)
{
if(fread(p,sizeof(GuestLink),1,fp)!=1)
{printf("can't read!");}
printf("%d\t",p->number);
printf("%s\t",p->name);
printf("%d\t",p->sum);
printf("%s\t
",p->time);
p=p->next;
}
fclose(fp);
}
采纳哦~
#include <stdlibh>
#include <timeh>
#include <conioh>
//
/ 地图状态约定 /
/ 0 : 周围9个格子都没有雷 /
/ 1~8: 周围9个格子有1~8个雷 /
/ -1 : 有雷的格子 /
/ -2 : 被翻开的有雷的格子 /
/ -3 : 地图边界 /
//
int Map[12][12]={0}; / 当前在玩的雷图 /
int MapShow[12][12]={0}; / 当前用户选择过的地方,即“已翻开”的格子 /
int nSpaceLeft = 100; / 剩余的空白数,如果为0,则任务成功! /
int lastX,lastY; / 失败时,记录挖到雷的位置 /
int AllMaps[5][12][12]={0}; / 供用户选择的五张雷图 /
/ 显示雷区(每次用户 *** 作之后都要重新显示) /
void DrawMap();
/ 初始化雷区 /
void InitMap();
/ 游戏开始时,加载用户选择的一幅雷图 /
void LoadMap(int index);
/ 玩扫雷游戏 /
int Play();
/ 绘制主菜单 /
void DrawMainMenu();
/ 显示结果 /
void ShowResult(int result);
/ 主函数 /
int main(int argc, char argv[])
{
char ch;
int result;
srand(time(NULL)); / 按当前时间初始化随机数,这样每次启动的时候,雷的位置的不一样 /
InitMap(); / 初始化5张雷图,供用户选择 /
while(1) / 用while循环,保证只有在用户选择退出时,才退出游戏 /
{
DrawMainMenu(); / 绘制主菜单 /
flushall(); / 清空所有输入输出缓冲区,主要是清空输入缓冲区,防止前面的输入对getch()的干扰 /
ch = getch(); / 读取输入 /
switch(ch)
{
case '1': / 用户选择1 /
printf("\n\t请输入雷图编号(1-5):");
while (1) / 循环输入,如果输入错误就一直要求输入 /
{
flushall();
ch = getch(); / 读取用户输入的雷图编号 /
if (ch >= '1' && ch <= '5') / 只有在1-5之间有效 /
{
LoadMap(ch-'1'); / ch -'1',将用户输入转换为雷图下标(下标从0开始,所以是-'1')/
break; / 如果输入正确,就退出循环输入 /
}
else
{
/ 输入错误,则提示重新输入 /
printf("\n\t输入无效!请重新输入雷图编号(1-5):");
flushall();
}
}
result = Play(); / 开始玩扫雷游戏 /
ShowResult(result); / 显示游戏结果 /
break;
case '2': / 用户选择2 /
exit(0); / 直接退出 /
break;
default: / 无效输入 /
/ 不做任何 *** 作,重新显示主菜单 /
break;
}
}
return 0;
}
void LoadMap(int index)
{
int i,j;
nSpaceLeft = 90;
for(i=0;i<12;i++)
for(j=0;j<12;j++)
{
Map[i][j] = AllMaps[index][i][j]; / 将5张雷图中的下标为index的那一张载入到Map数组 /
MapShow[i][j] = 0; / 重新开始游戏,所以所有格子都是“未翻开”状态 /
}
}
void InitMap()
{
int i,j,k;
int m,n;
/ 要初始化5张地图 /
for(k=0;k<5;k++)
{
/ 初始化地图的边界 /
for(i=0;i<12;i++)
{
/ 下标为0和11的位置都是“边界”,这些位置不属于雷区,仅在程序内部使用 /
AllMaps[k][0][i] = -3;
AllMaps[k][11][i] = -3;
AllMaps[k][i][0] = -3;
AllMaps[k][i][11] = -3;
}
/ 先初始化10个雷的位置 /
for(i=0;i<10;i++)
{
m = rand()%10 + 1; / 随机选一个X坐标 /
n = rand()%10 + 1; / 随机选一个Y坐标 /
if(AllMaps[k][m][n] == 0) / 如果随机产生的位置之前没有被安排放置雷 /
{
AllMaps[k][m][n] = -1; / 放置一个雷 /
}
else / 随机产生的位置在之前已经放置了雷了 /
{
i--; / 这个位置无效,重新产生一个 /
}
}
/ 计算每个格子周围雷的个数 /
for(i=1; i<11; i++)
for(j=1; j<11;j++)
{
if(AllMaps[k][i][j] != -1)
{
AllMaps[k][i][j] = 0;
/ 周围的8个位置,有一个雷就加一 /
//
/ 坐标[i][j]周围的8个坐标位置: /
/ [i-1][j-1] [i-1][j] [i-1][j+1] /
/ [i][j-1] [i][j] [i][j+1] /
/ [i+1][j-1] [i+1][j] [i+1][j+1] /
//
if(AllMaps[k][i-1][j-1] == -1)
AllMaps[k][i][j]++;
if(AllMaps[k][i-1][j] == -1)
AllMaps[k][i][j]++;
if(AllMaps[k][i-1][j+1] == -1)
AllMaps[k][i][j]++;
if(AllMaps[k][i][j-1] == -1)
AllMaps[k][i][j]++;
if(AllMaps[k][i][j+1] == -1)
AllMaps[k][i][j]++;
if(AllMaps[k][i+1][j-1] == -1)
AllMaps[k][i][j]++;
if(AllMaps[k][i+1][j] == -1)
AllMaps[k][i][j]++;
if(AllMaps[k][i+1][j+1] == -1)
AllMaps[k][i][j]++;
}
}
}
}
void DrawMap()
{
int i,j;
system("cls"); / 清屏 /
/ 绘制坐标和边框 /
printf("\n\n\n");
printf("\t Y ");
for(i=1; i<11; i++) printf("%-02d",i-1);
printf("\n\tX |###################|\n");
/ 每一行按规则绘制雷区 /
for(i=1; i<11; i++)
{
printf("\t%-02d|",i-1); / 显示X坐标 /
for(j=1; j<11; j++)
{
if(MapShow[i][j]) / 如果该位置被用户“挖开”了,就照实显示 /
{
if (Map[i][j] >= 0) / 非雷,显示周围雷的个数 /
{
printf("%d|",Map[i][j]);
}
/else if(Map[i][j] == 0)
{
printf("0|");
}/
else if (Map[i][j] == -1) / 雷,显示 /
{
printf("|");
}
else if (Map[i][j] == -2) / 用户挖到的雷,显示@ /
{
printf("@|");
}
else / 其他情况(目前不会出现,方便以后扩展) /
{
printf(" |");
}
}
else / 如果该位置没有被用户“挖开”,则显示空格 /
{
printf(" |");
}
}
printf("\n");
}
printf("\t |###################|\n");
}
void DrawMainMenu()
{
system("cls");
printf("\n\n\n\n\n\n");
printf("\t|###################|\n");
printf("\t| 请选择! |\n");
printf("\t| 1 开始扫雷 |\n");
printf("\t| 2 退出 |\n");
printf("\t|###################|\n");
}
int Play()
{
char chX,chY; / 用户输入 /
int X,Y; / 用户输入转换为整数下标 /
int i,j;
while (1)
{
DrawMap(); / 重新绘制雷区图 /
/ 输入X坐标 /
printf("\n\t请输入X:");
flushall();
while(1)
{
chX = getch();
if (chX >= '0' && chX <= '9')
{
X = chX - '0' + 1;
break;
}
else
{
printf("\n\t输入无效!请重新输入X:");
flushall();
}
}
/ 输入Y坐标 /
printf("\n\t请输入Y:");
flushall();
while(1)
{
chY = getch();
if (chY >= '0' && chY <= '9')
{
Y = chY - '0' + 1;
break;
}
else
{
printf("\n\t输入无效!请重新输入Y:");
flushall();
}
}
if(MapShow[X][Y] == 0) / 输入的是未翻开的位置 /
{
MapShow[X][Y] = 1; / 将该位置标记为“已翻开” /
if(Map[X][Y] == -1) / 如果挖到的是雷 /
{
Map[X][Y] = -2; / 标记为-2,表示这是被用户挖到的雷 /
for(i=1;i<11;i++)
for(j=1;j<11;j++)
MapShow[i][j]=1; / 游戏结束,自动将所有位置“翻开” /
/ 记录用户挖到雷的位置坐标 /
lastX = X-1;
lastY = Y-1;
return 0; / 游戏失败! /
}
else / 如果挖到的不是雷 /
{
nSpaceLeft--; / 剩余空白数减一 /
if(nSpaceLeft==0) / 剩余空白数为0,则表示游戏成功 /
{
return 1; / 游戏胜利! /
}
}
}
else / 输入的是已翻开的位置 /
{
printf("\n\t你输入的位置是[%d,%d]\n\t这个位置已经翻开!请重新输入!\n\t按任意键继续\n",X-1,Y-1);
flushall();
getch();
}
}
}
void ShowResult( int result )
{
DrawMap();
if(result == 1) / 游戏成功 /
{
printf("\n\t恭喜!您完成的扫雷任务!\n\t按任意键继续");
flushall();
getch();
}
else / 游戏失败 /
{
printf("\n\t哈哈!您在位置[%d,%d]挖到雷了,任务失败!\n\t按任意键继续",lastX, lastY);
flushall();
getch();
}
}
以上就是关于c语言程序设计 课程设计——一个通信录的程序全部的内容,包括:c语言程序设计 课程设计——一个通信录的程序、c语言程序课程设计,链表,求助、c语言课程设计等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)