c语言程序设计 课程设计——一个通信录的程序

c语言程序设计 课程设计——一个通信录的程序,第1张

//头文件的定义

#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语言课程设计等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9277984.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存