手机运动信息管理系统

news2024/12/23 14:24:08

目录

一:案例要求:

二:代码:(多文件形式)

1:main.h

2 main.cpp

3 menu.cpp(这个可以拆开写在每一个.cpp里面)

4 功能1用户信息的增删改查.h

5功能1用户信息的增删改查.cpp

6功能2运动信息管理.h

7功能2运动信息管理.cpp

8功能3运动排行榜.h

9功能3运动排行榜.cpp

10功能4定制运动路线.h

11功能4定制运动路线.cpp

12功能5 数据文件操作.h

13功能5 数据文件操作.cpp


一:案例要求:

二:代码:(多文件形式)

1:main.h

#ifndef _MENU_ALL_H_
#define _MENU_ALL_H_
#include<string.h>
#include<fstream>
#include<iomanip>
#include<iostream> 
#include<stdlib.h>
using namespace std;
typedef int status;
#define MAXSIZE 100
typedef struct {
	string idcard;
	string name;
	string sex;
	int age;
	int step[7];
	double averagesteps;
	//int day;
}people;
typedef struct{
	people *elem;
	int length;
}user;
void menuall();
#endif

2 main.cpp

#include "menu_all.h"
#include "reach1.h"
//void reach1(user &users);
void reach2(user &users);
void reach3(user &users);
void reach4(user &users);
void reach5(user &users);
int main() {
	user users; 
	users.elem=new people[MAXSIZE];
	users.length=0;
	int flag = 1;
	while (1) {
		menuall();
		int x = -1;
		cout << "请选择:";
		cin >> x;
		switch (x) {
		case 0:exit(0);
		case 1: system("cls");
			reach1(users);
			if (flag == 0) {
				cout << "请先完成数据加载!"; break;
			}break;
		case 2:system("cls");
			reach2(users);
			if (flag == 0) {
				cout << "请先完成数据加载!"; break;
			} system("cls"); break;
		case 3: system("cls");reach3(users);
			if (flag == 0) {
				cout << "请先完成数据加载!"; break;
			} system("cls"); break;
		case 4: system("cls");reach4(users);system("cls");
			if (flag == 0) {
				cout << "请先完成数据加载!"; break;
			} break;
		case 5: system("cls");
			reach5(users);system("cls");break;
		default: cout << "Input Error"<<endl; break;
		}
	}
	system("pause");
	system("cls");
	return 0;
}

3 menu.cpp(这个可以拆开写在每一个.cpp里面)

#include "menu_all.h"
void menuall()
{
	cout << "************手机运动信息管理系统************" << endl;
	cout << endl;
	cout << "  1,用户信息管理        2,运动信息管理      " << endl;
	cout << "  3,运动排行榜          4,定制运动路线      " << endl;
	cout << "  5,读取数据文件        0,退出              " << endl;
	cout << endl;
	cout << "********************************************" << endl;
}
void menu1()
{
	cout << "**************用户信息管理**************" << endl;
	cout << endl;
	cout << "  1,添加用户         2,删除用户         " << endl;
	cout << "  3,查询用户         4,修改用户         " << endl;
	cout << "  0,返回上一级       5,显示全部用户                    " << endl;
	cout << endl;
	cout << "****************************************" << endl;
}
void menu2()
{
	cout << "**************运动信息管理**************" << endl;
	cout << endl;
	cout << "  1,添加用户运动信息                    " << endl;
	cout << "  2,修改用户运动信息                    " << endl;
	cout << "  3,显示所有用户运动信息                " << endl;
	cout << "  0,返回上一级                          " << endl;
	cout << endl;
	cout << "****************************************" << endl;
}
void menu3()
{
	cout << "**************运动排行榜*************" << endl;
	cout << endl;
	cout << "  1,当天排行榜                       " << endl;
	cout << "  2,连续运动排行榜                   " << endl;
	cout << "  3,指定用户的一周排行榜             " << endl;
	cout << "  0,返回上一级                       " << endl;
	cout << endl;
	cout << "*************************************" << endl;
}
void menu4()
{
	cout << "**************定制运动路线**************" << endl;
	cout << endl;
	cout << "  1,绘制运动路线                        " << endl;
	cout << "  2,选择运动路线                        " << endl;
	cout << "  0,返回上一级                          " << endl;
	cout << endl;
	cout << "****************************************" << endl;
}
void menu5()
{
	int n;
	cout << "**************读取数据文件**************" << endl;
	cout << endl;
	cout << "  1,数据加载                            " << endl;
	cout << "  2,数据保存                            " << endl;
	cout << "  0,返回上一级                          " << endl;
	cout << endl;
	cout << "****************************************" << endl;
}

4 功能1用户信息的增删改查.h

#ifndef ff
#define ff
//用户信息的增删改查
void menu1();
void reach1(user &users);
bool add_1(user &users);
bool delete_1(user &users);
bool find_1(user &users);
bool modify_1(user &users);
void output(user users);
#endif

5功能1用户信息的增删改查.cpp

#include "menu_all.h"
#include "reach1.h"
#include "reach5.h"
void reach1(user &users) {
	while (1) {
		menu1();
		int x = -1;
		bool flag = false;
		cout << "请选择:";
		cin >> x;
		switch (x)
		{
		case 1:
			if (add_1(users)) {
				cout << "成功添加用户" << endl;
			}
			else {
				cout << "添加用户失败" << endl; 
			}  break;
		case 2:
			if (delete_1(users)) {
				cout << "成功删除用户" << endl;
			}
			else {
				cout << "删除用户失败" << endl; 
			} break;
		case 3:
			if (find_1(users)) {
				cout << "成功查找用户" << endl; 
			}
			else {
				cout << "查找用户失败" << endl; 
			} break;
		case 4:
			if (modify_1(users)) {
				cout << "成功修改用户信息" << endl;
			}
			else {
				cout << "修改用户信息失败" << endl; 
			} break;
		case 0: system("cls");  return;
		case 5: output(users); break;
		default:cout << "Input Error";  break;
		}
		system("pause");
		system("cls");
	}
}
bool add_1(user &users) {
	people t1;
	cout << "请决定添加几个用户信息:";
	int x = -1,flag=0;
	cin >> x;
	string idcard;
	for (int i = 0; i < x; i++) {
		cout << "用户名(手机号(11位)):";
		while (true) {
			cin >> idcard;
			if (idcard[0] == '1' && idcard.length() == 11) {
				for (int j=0;j<users.length;j++) {//唯一性
					if (users.elem[i].idcard==idcard) {
						cout << "用户名重复,请重新输入:";
						flag = 1;
					}
				}
				if (flag == 0) {
					t1.idcard = idcard; break;
				}
			}
			else cout << "输入错误(手机号首位1,长度11),请重新输入:";
		}
		cout << "请输入昵称(4~12个):";
		flag = 0;string name;
		while (true) {
			cin >> name;
			if (name.length() >= 4 && name.length() <= 12) {
				for (int j = 0; j < users.length;j++) {//唯一性
					if (users.elem[j].name==name) {
						cout << "昵称重复,请重新输入:";
						flag = 1;
					}
				}
				if (flag == 0) t1.name = name; break;
			}
			else cout << "输入错误(长度(4~12)),请重新输入:";

		}flag = 0;
		cout << "请输入性别:";string sex;
		while (true) {
			cin >> sex;
			if (sex == "男" || sex == "女") {
				t1.sex = sex; break;
			}
			else  cout << "性别有误,请重新输入:";
		}
		cout << "请输入年龄:";int age;
		while (true) {
			cin >> age;
			if (age < 0 || age>200) {
				cout << "输入错误,请重新输入:";
			}
			else {
				t1.age = age; break;
			}
		}
		for(int j=1;j<=7;j++){
			t1.step[j-1]=0;
		}
		t1.averagesteps=0;
		write(t1);
		users.elem[users.length++]=t1;
}
	return true;
}
bool delete_1(user &users) {
	cout << "请输入要删除用户的手机号或者昵称:(0/1)";
	int x=-1;
	cin>>x;
	int flag = 0,k=0;
	string target;
	switch(x){
		case 0: 
			cout<<"请输入手机号:";
			cin >> target;
			for (int i = 0; i < users.length; i++) {
				if (target.compare(users.elem[i].idcard) != 0) {
					users.elem[k++]=users.elem[i];
				}else flag=1;
			}
			if(flag==1)
				users.length--;break;
		case 1:
			cout<<"请输入昵称:";
			cin>>target;
			for(int i=0;i<users.length;i++){
				if(target.compare(users.elem[i].name)!=0){
					users.elem[k++]=users.elem[i];
				}else flag=1;
			}
			if(flag==1)
				users.length--;break;
		default: cout<<"Input Error"<<endl;
	}
	
	if (flag == 1) 	return true;
	return false;
}
void menu1_1() {
	cout << "===============查询方式===================" << endl;
	cout << "  1用户名          2性别      3昵称 " << endl;
	cout << "  0返回上一级" << endl;
	cout << "==========================================" << endl;
}
bool find_1(user &users) {
	menu1_1();
	int x = -1,flag=0;
	string idcard,name;
	while (true) {
		cout << "选择查询方式:";
		cin >> x; 
		switch (x) {
		case 0:return true;
		case 1:  
			cout << "请输入用户名:";
			cin >> idcard;
			for (int i=0;i<users.length;i++) {
				if (users.elem[i].idcard.compare(idcard)==0) {
					cout << "用户名: " << users.elem[i].idcard << "  昵称:" << users.elem[i].name << "  性别:" << users.elem[i].sex
						<< "  年龄:" << users.elem[i].age <<endl; flag = 1;
				}
			}if (flag == 0)cout << "查无此人"<<endl; break;
		case 2:
			cout << "请输入昵称:";
			cin >> name;
			for (int i=0;i<users.length;i++) {
				if (users.elem[i].name.compare(name)==0) {
					cout << "用户名: " << users.elem[i].idcard << "  昵称:" << users.elem[i].name << "  性别:" << users.elem[i].sex
						<< "  年龄:" << users.elem[i].age <<endl; flag = 1;
				}
			}if (flag == 0)cout << "查无此人"<<endl; break;
		deault: cout << "输入错误,请重新输入:" << endl; break;
		}
	}
	if(flag==1)
		return true;
	return false;
}
bool modify_1(user &users) {
	people t1;
	int flag = 0,x=-1,flag1=0;
	cout << "请输入待修改的用户名:";
	string target;
	cin >> target;
	for (int i = 0; i < users.length; i++) {
		if (target.compare(users.elem[i].idcard) == 0) {//这个地方可以和add_1部分功能复用,可以改进
			flag1=1;
			cout << "是否修改用户名(0:no 1yes):";
			cin >> x;
			if (x == 1) {
				cout << "用户名(手机号(11位)):";string idcard;
				while (true) {
					cin >> idcard;
					if (idcard[0] == '1' && idcard.length() == 11) {
						for (int j=0;j<users.length;j++) {//唯一性
							if (users.elem[j].idcard.compare(idcard) == 0) {
								cout << "用户名重复,请重新输入:";
								flag = 1;break;
							}
						}
						if (flag == 0) {
							users.elem[i].idcard = idcard; break;
						}
					}
					else cout << "输入错误(手机号首位1,长度11),请重新输入:";
				}
			}
			cout<<"是否修改昵称(0no/1yes):";
			cin>>x;
			if(x==1){
				cout<<"修改昵称为:";string name;
				while (true) {
					cin >> name;
					if (name.length() >= 4&& name.length() <= 12) {
						for (int j=0;j<users.length;j++) {//唯一性
							if (users.elem[j].name.compare(name) == 0) {
								cout << "昵称重复,请重新输入:";
								flag = 1;break;
							}
						}
						if (flag == 0) {
							users.elem[i].name = name; break;
						}
					}
					else cout << "输入错误(手机号首位1,长度11),请重新输入:";
				}
			}	
			cout<<"是否修改性别(0no/1yes):";
			string sex;
			cin>>x;
			if(x==1){
				while(true){
					cout<<"请输入性别:";
					cin>>sex;
					if(sex=="男"||sex=="女"){
						users.elem[i].sex=sex;break;
					}else{
						cout<<"输入性别有误,请重新输入!"<<endl;
					}
				}
			}
			cout<<"是否修改年龄(0no/1yes):";	
			int age;
			cin>>x;
			if(x==1){
				while(true){
					cout<<"请输入待修改的年龄:";
					cin>>age;
					if(age>=0&&age<=120){
						users.elem[i].age=age;break;
					}else{
						cout<<"年龄输入有误,请重新输入:"<<endl;
					}
				}
			}
		}
	}	
	if(flag1==1)
		return true;
	return false;
}
void output(user users){
	for(int i=0;i<users.length;i++){
		cout << "用户名: " << users.elem[i].idcard << "  昵称:" << users.elem[i].name << "  性别:" << users.elem[i].sex
		<< "  年龄:" << users.elem[i].age <<endl;
	}
}

6功能2运动信息管理.h

#ifndef ea
#define ea
//运动信息管理
void menu2();
void reach2(user &users);
void show_2(user &users);
void modify_2(user &users);
void add_2(user &users); 
int account(people t);
#endif

7功能2运动信息管理.cpp

#include "menu_all.h"
#include "reach2.h"
void reach2(user &users){
	while(1){
		menu2();
		cout<<"请选择:";
		int m;
		cin>>m;
		switch(m){
			case 0:return ;
			case 1:add_2(users);break;
			case 2:modify_2(users);break;
			case 3:show_2(users);break;
			default:cout<<"Input Error"<<endl;break;
		} 
		system("pause");
		system("cls");
	}
} 
void add_2(user &users){
	for(int i=0;i<users.length;i++){
		int foot=0;
		cout<<"请输入昵称为"<<users.elem[i].name<<"当天的运动步数:";
		cin>>foot;
		int k=0,sum=0,max=0,day=0;
		for(int j=1;j<7;j++){
			users.elem[i].step[k]=users.elem[i].step[j];
			sum+=users.elem[i].step[k];
			k++;
		}
		users.elem[i].step[k]=foot;
		sum+=users.elem[i].step[k];
		users.elem[i].averagesteps=sum/7.0;
	}
}
void modify_2(user &users){
	cout<<"请输入要修改步数的用户名:";
	string target;
	cin>>target;
	int flag=0,foot=0;
	for(int i=0;i<users.length;i++){
		if(!users.elem[i].idcard.compare(target)){
			flag=1;
			cout<<"请输入修改的步数:";
			cin>>foot;
			users.elem[i].step[6]=foot;
		}else{
			int k=0;
			for(int j=1;j<7;j++){
				users.elem[i].step[k++]=users.elem[i].step[j];
			}
			users.elem[i].step[k]=0;
		}
	}
	if(flag==0)
		cout<<"查无此人"<<endl;
	if(flag==1) cout<<"修改成功!"<<endl;
}
void show_2(user &users){
	cout<<"    用户名"<<"    昵称   "<<" 性别 "<<" 年龄 "<<" 第一天 "<<" 第二天 "<<" 第三天 "
	<<" 第四天 "<<" 第五天 "<<" 第六天 "<<" 第七天 "<<" 连续运动天数 "<<" 平均步数 "<<endl;
	for(int i=0;i<users.length;i++){
		cout<<left<<users.elem[i].idcard<<"    "<<left<<users.elem[i].name<<"    "<<left<<users.elem[i].sex<<"    "<<left<<users.elem[i].age<<"    ";
		for(int j=0;j<7;j++){
			cout<<left<<users.elem[i].step[j]<<"   ";
		}
		cout<<"       "<<account(users.elem[i])<<"        "<<users.elem[i].averagesteps<<endl;
	}
}
int account(people t){//计算连续运动天数 
	int max=0,num=0;
	for(int i=0;i<7;i++){
		if(t.step[i]>0){
			num++;
			if(max<num) max=num;
		}else{
			if(max<num) {
				max=num;num=0;
			}else num=0;
		}
	} 
	return max;
} 

8功能3运动排行榜.h

#ifndef eh
#define eh
//运动排行榜
void menu3();
void reach3(user &users);
void sort_1(user users);
void sort_2(user users);
void sort_3(user users);
#endif

9功能3运动排行榜.cpp

#include "menu_all.h"
#include "reach3.h"
void reach3(user &users){
	while(1){
		menu3();
		cout<<"请选择排序方式:";
		int x=-1;
		cin>>x;
		switch(x){
			case 0: return ;
			case 1: sort_1(users);break;
			case 2: sort_2(users);break;
			case 3: sort_3(users);break;
			default:cout<<"Input Error"<<endl;break;
		}
		system("pause");
		system("cls");
	}
}
void sort_1(user users){
	cout<<"按照当天运动步数排行:"<<endl;
	cout<<" 用户名 "<<" 昵称 "<<" 当天运动步数:"<<endl;
	for (int i = 0; i < users.length-1; i++) {
		int min = i;
		for (int j = i; j < users.length; j++) {
			if (users.elem[min].step[6] < users.elem[j].step[6]) {
				min = j;
			}
		}
		if (min != i) {
			swap(users.elem[i],users.elem[min]);
		}
	}
	for(int i=0;i<users.length;i++){
		cout<<users.elem[i].idcard<<"  "<<users.elem[i].name<<"  "<<users.elem[i].step[6]<<endl;
	}
}
void sort_2(user users) {
	cout<<"按照连续运动天数排行:"<<endl;
	cout<<" 用户名 "<<" 昵称 "<<" 连续运动天数:"<<endl;
	for (int i = 0; i < users.length-1; i++) {
		int min = i;
		for (int j = i; j < users.length; j++) {
			if (users.elem[min].day < users.elem[j].day) {
				min = j;
			}
		}
		if (min != i) {
			swap(users.elem[i],users.elem[min]);
		}
	}
	for(int i=0;i<users.length;i++){
		cout<<users.elem[i].idcard<<"  "<<users.elem[i].name<<"  "<<users.elem[i].day<<endl;
	}
} 
void sort_3(user users){
	cout<<"按照一周总步数排行:"<<endl;
	cout<<" 用户名 "<<" 昵称 "<<" 平均步数:";
	for (int i = 0; i < users.length-1; i++) {
		int min = i;
		for (int j = i; j < users.length; j++) {
			if (users.elem[min].averagesteps < users.elem[j].averagesteps) {
				min = j;
			}
		}
		if (min != i) {
			swap(users.elem[i],users.elem[min]);
		}
}
for(int i=0;i<users.length;i++){
		cout<<users.elem[i].idcard<<"  "<<users.elem[i].name<<"  "<<users.elem[i].averagesteps<<endl;
	}
} 

10功能4定制运动路线.h

#ifndef ge
#define ge
//定制运动路线
#define Maxint 32767//表示无穷大 
#define MVNum 20//最大顶点数 
typedef char VerTexType;//设顶点的数据类型为字符型
typedef double ArcType;//假设边的权值类型为浮点型 
typedef struct {
	VerTexType vexs[MVNum][50];//顶点表
	ArcType arcs[MVNum][MVNum];//邻接矩阵
	int vexnum, arcnum;//图的当前点数和边数 
}AMGraph;
void menu4();
void reach4(user &users);
status LocateVex(AMGraph G, char* u);
status Selectgraph(AMGraph G,char *s);
void draw(user users,AMGraph& G);
void choice(user users,AMGraph G);
status Readtxtgraph(AMGraph& G);
#endif

11功能4定制运动路线.cpp

#include"menu_all.h"
#include "reach4.h"
status Readtxtgraph(AMGraph& G)
{
	int i = 0, j, k;
	double w;
	int s;
	char s1[50], s2[50];
	fstream f;
	f.open("C:\\Users\\a1474\\OneDrive\\桌面\\新建项目\\stu1.txt", ios::in);
	while (f >> s >> G.vexs[i])
	{
		i++;
	}
	f.close();
	G.vexnum = i;
	for (i = 0; i < G.vexnum; i++)
		for (j = 0; j < G.vexnum; j++)
			G.arcs[i][j] = Maxint;//边的权值均设置为无穷大 
	i = 0;
	f.open("C:\\Users\\a1474\\OneDrive\\桌面\\新建项目\\stu2.txt", ios::in);
	while (f >> s1 >> s2 >> w)
	{
		k = LocateVex(G, s1);
		j = LocateVex(G, s2);//确定v1,v2在G中的位置 
		G.arcs[k][j] = w;
		G.arcs[j][k] = w;
		i++;
	}
	f.close();
	G.arcnum = i;
	cout << "运动地点名称:" << endl;
	for (i = 0; i < G.vexnum; i++)
	{
		cout << G.vexs[i];
		cout << endl;
	}
	cout << "各运动地点间距离得出的邻接矩阵:" << endl;
	for (i = 0; i < G.vexnum; i++)
	{
		for (j = 0; j < G.vexnum; j++)
		{
			if (G.arcs[i][j] == 32767)
				cout << left << setw(4) << "∞";
			else
				cout << left << setw(4) << G.arcs[i][j];
		}
	}
	return 1;
}

status LocateVex(AMGraph G, char* u)
{
	int o;
	for (o = 0; o < G.vexnum; o++)
	{
		if (strcmp(G.vexs[o], u) == 0)
			return o;
	}
	return -1;
}

void draw(user users,AMGraph& G){
	if(Readtxtgraph(G)){
		cout<<"绘制完成"<<endl;
	} 
	return ;
} 

void choice(user users,AMGraph G){
	char s[50];
	cout<<"请输入运动起点:";
	cin>>s;
	Selectgraph(G,s); 
}
status Selectgraph(AMGraph G,char *s)
{
	int n;
	for(n=0;n<G.vexnum;n++)
	{
		if(strcmp(G.vexs[n],s)==0)
		break;
	}
	if(n==G.vexnum)
	return 0;
	int p[G.vexnum][G.vexnum];
	int i,S[G.vexnum],j,k;
	int a[G.vexnum];
	int num=1,u;
	double dist[G.vexnum],wmin;
	for(i=0;i<G.vexnum;i++)
	{
		a[i]=-1;
	}
	for(i=0;i<G.vexnum;i++)
	{
		for(j=0;j<G.vexnum;j++)
		{
			p[i][j]=-1;
		}
	}
	for(i=0;i<G.vexnum;i++)
	{
		dist[i]=G.arcs[n][i];
		S[i]=0;
	}
	S[n]=1;
	for(i=0;i<G.vexnum;i++)
	{
		p[i][0]=n;
	}
	do
	{
		wmin=Maxint;
		u=n;
		for(i=0;i<G.vexnum;i++)
		{
			if(S[i]==0)
			{
				if(dist[i]<wmin)
				{
					u=i;
					wmin=dist[i];
				}
			}
		}
		S[u]=1;
		for(i=0;i<G.vexnum;i++)
		{
			if(p[u][i]==-1)
			{
				p[u][i]=u;
				break;
			}
		}
		for(i=0;i<G.vexnum;i++)
		{
			if(S[i]==0)
			{
				if(dist[u]+G.arcs[u][i]<dist[i])
				{
					k=1;
					for(j=0;j<G.vexnum;j++)
					{
						if(p[i][j]==-1&&a[i]==-1)
						a[i]=j; 
						if(p[i][j]==-1)
						{
							break;
						}
					}
					j=a[i];
					while(p[u][k]!=-1)
					{
						p[i][j]=p[u][k];
						k++;
						j++;
					}
					dist[i]=dist[u]+G.arcs[u][i];
				}
				if(num==G.vexnum-2)
				p[i][j]=i;
			}
		}
		num++;
	}while(num!=G.vexnum-1);
	for(i=0;i<G.vexnum;i++)
	{
		j=0;
		if(i==n)
		continue;
		else
		{
			while(p[i][j]!=-1)
			{
				cout<<left<<setw(16)<<G.vexs[p[i][j]];
				j++;
			}
			cout<<dist[i]<<endl;
		}
	}
	return 1;
}
void reach4(user &users){
	AMGraph G;
	while(1){
		menu4();
		cout<<"请输入选择:";
		int x;
		cin>>x;
		switch(x){
			case 0: return ;
			case 1:draw(users, G);break;
			case 2:choice(users,G);break;
			default:cout<<"Input Error"<<endl;break;
		}
		system("pause");
		system("cls");
	}
}

12功能5 数据文件操作.h

#ifndef geh
#define geh
//数据文件操作
void menu5();
status reach5(user &users);
status read(user &users);
status write(people t1);
status writeall(user &users);
#endif

13功能5 数据文件操作.cpp

#include "menu_all.h"
#include "reach5.h"
string idcard;
string name;
string sex;
int age;
double averagesteps;
status reach5(user &users) {
	while(1){
		menu5();
		cout << "请选择:";
		int x=-1;
		cin >> x;
		switch (x) {
			case 0: system("cls");return 1;
			case 1:read(users); break;
			case 2:writeall(users);break;
			default:cout << "Input Error,Please Rnew Input"<<endl; break;
		}
		system("pause");
		system("cls");
	}
	return 1;
}
status read(user &users) {//读取用户信息 
	int n,j=0;
	people t1;
	fstream f("C:\\Users\\a1474\\OneDrive\\桌面\\新建项目\\stu.txt",ios::in);
	if (!f)                                //打开失败
	{
		cout << "文件打开失败!" << endl;
		return 1;
	}
	else {
		cout << "文件打开成功" << endl;
	}
	while (f >> t1.idcard>>t1.name >> t1.sex >> t1.age)
	{
		n = 0;
		while (f >> t1.step[n])
		{
			n++;
			if (n == 7)
				break;
		}
		f >> t1.averagesteps;
		f >> t1.day;
		users.elem[j++]=t1;
		users.length++;
	}
	
	f.close();
	for (int i = 0; i <users.length; i++)
	{
		cout << setw(16) << users.elem[i].idcard;
		cout << left << setw(8) << users.elem[i].name;
		cout << left << setw(8) << users.elem[i].sex;
		cout << left << setw(8) << users.elem[i].age;
		for (int j = 0; j < 7; j++)
		{
			cout << left << setw(8) << users.elem[i].step[j];
		}
		cout << left << setw(16) << users.elem[i].averagesteps;
		//cout << left << setw(8) << users.elem[i].day;
		cout << endl;
	}
	return 1;
}
status write(people t1)//写临时文件,防止断电等紧急关闭 
{
	int i;
	fstream f;
	f.open("C:\\Users\\a1474\\OneDrive\\桌面\\新建项目\\stu3.txt",ios::out|ios::app);
	if(!f){
		cout<<"文件打开失败!"<<endl; return 1;
	}
	f<<left<<setw(16)<<t1.idcard;
	f<<left<<setw(8)<<t1.name;
	f<<left<<setw(8)<<t1.sex;
	f<<left<<setw(8)<<t1.age;
	for(int j=0;j<7;j++)
	{
		f<<left<<setw(8)<<t1.step[j];
	}
	f<<left<<setw(16)<<t1.averagesteps;
	f<<endl;
	f.close();
	return 1;
}
status writeall(user &users){
	ifstream ifa;
	people t1;
	ifa.open("C:\\Users\\a1474\\OneDrive\\桌面\\新建项目\\stu3.txt", ios::in);
	char c;
	ifa >> c;
	if (ifa.fail())
	{
		//cout << "文件为空!" << endl;
		ifa.close();
	}else{
		cout<<"检测到有临时数据是否恢复并保存(0no 1yes):";
		while(1){
			int x=-1,flag=0;
			cin>>x;
			switch(x){
				case 1:
					while (ifa >> t1.idcard>>t1.name >> t1.sex >> t1.age)
					{
						int n = 0;
						while (ifa >> t1.step[n])
						{
							n++;
							if (n == 7)
								break;
						}
						ifa >> t1.averagesteps;
						users.elem[users.length-1]=t1;
						users.length++;
					}cout<<"数据恢复成功!";flag=1;break;
				case 0: flag=1;break;
				default:cout<<"选择错误,请重新选择:"; break;
			}
			if(flag==1) break;
		}
	}
	ifa.close();

	fstream f;
	f.open("C:\\Users\\a1474\\OneDrive\\桌面\\新建项目\\stu4.txt",ios::out);
	if(!f){
		cout<<"文件打开失败!"<<endl; return 1;
	}
	for( int i=0; i<users.length; i++) {
		f<<left<<setw(16)<<users.elem[i].idcard;
		f<<left<<setw(8)<<users.elem[i].name;
		f<<left<<setw(8)<<users.elem[i].sex;
		f<<left<<setw(8)<<users.elem[i].age;
		for(int j=0;j<7;j++)
		{
			f<<left<<setw(8)<<users.elem[i].step[j];
		}
		f<<left<<setw(16)<<users.elem[i].averagesteps;
		f<<endl;
	}
	f.close();
	cout<<"文件保存成功!"<<endl;
	return 1;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2056335.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙(API 12 Beta3版)【DRM Kit 简介】数字版权保护

开发者通过调用DRM Kit&#xff08;Digital Rights Management Kit&#xff0c;数字版权保护服务&#xff09;提供的接口可以开发播放器应用&#xff0c;实现数字版权保护的基础操作&#xff0c;如设备证书管理、许可证管理、解密操作等&#xff1b;还可以通过接口参数配置完成…

亚马逊铺货ERP国内采集,图片编辑文本翻译一键拉伸,自...

亚马逊全功能 ERP 铺货采集&#xff0c;自动生成 SKU。 说说国内平台采集的商品如何通过 ERP 自己做链接上传发布到亚马逊平台&#xff01; 1. 首先进入 ERP 插件&#xff0c;直接点击 1688 平台采集自己想做的产品类型。各位按照自身的需求选择搜索的 JK&#xff0c;选择想采…

AI小白福音来啦~Flux文生图,支持手部细节,直出精美图像,让你瞬间变高手!

国产AI绘画软件在近年来发展迅速&#xff0c;其中千鹿设计助手的“Flux 文生图”插件受到了用户的关注。根据搜索结果&#xff0c;Flux文生图插件以其强大的功能和易用性&#xff0c;为设计师提供了便捷的服务。以下是关于Flux文生图插件的测评和使用指南&#xff1a; 工具准备…

【Hot100】LeetCode—160. 相交链表

目录 1- 思路思路 2- 实现⭐160. 相交链表——题解思路 3- ACM 实现 原题连接&#xff1a;160. 相交链表 1- 思路 思路 首先想要找到相交点&#xff0c;需要定义连个指针。两个指针一定得是同步的&#xff0c;例如 A 链表 [1,2,3,4,5] &#xff0c;链表 B 是 [4,5] 1- 指针对…

<Qt> 界面优化

目录 前言&#xff1a; 背景介绍 一、QSS基本语法 二、QSS设置方式 &#xff08;一&#xff09;指定控件样式设计 &#xff08;二&#xff09;全局样式设置 &#xff08;三&#xff09;从文件加载样式表 &#xff08;四&#xff09;Qt Designer 编辑样式 三、选择器 …

​​JVM三:JVM垃圾回收机制(GC)

1.什么是垃圾? 指的是不再使用的内存。 2.垃圾回收 将不用的内存&#xff0c;自动释放&#xff0c;解决内存泄露问题。 3.GC主要针对堆进行释放 GC是以"对象"为基本单位&#xff0c;进行回收&#xff0c;而不是字节。 垃圾回收&#xff08;GC&#xff09;主要处理三…

刑事拘留和逮捕在程序上有何区别?

1. 实施条件&#xff1a;刑事拘留是在有重大犯罪嫌疑且存在逃避侦查、串供或者其他妨碍刑事诉讼行为可能的情况下&#xff0c;由公安机关决定采取的临时剥夺人身自由的强制措施。而逮捕则是更为严厉的强制措施&#xff0c;通常在犯罪嫌疑人涉嫌的重大犯罪事实已经查清&#xff…

【贝壳找房】测试开发一面凉经--北京现场面(附面试答案)

1.单链表反转写 单链表是一种线性结构&#xff0c;它是由一个个节点&#xff08;Node&#xff09;组成的。并且每个节点&#xff08;Node&#xff09;是由一块数据域&#xff08;data&#xff09;和一块指针域&#xff08;next&#xff09;组成。 节点的数据域&#xff1a;da…

vue element-plus el-drawer 自定义抽屉标题 template slot动态标题定义方法

默认抽屉定义&#xff0c; 这里的title就是标题的定义 <el-drawer v-model"drawer" title"I am the title" :direction"direction" :before-close"handleClose" > 如果我们需要自定义这个标题&#xff0c;就需要使用slot <e…

ebpf教程(4.1):XDP程序的加载

文章目录 前言环境准备加载XDP程序源码构建过程运行 前言 前置阅读要求&#xff1a; ebpf教程(3):使用cmake构建ebpf项目-CSDN博客[译] [论文] XDP (eXpress Data Path)&#xff1a;在操作系统内核中实现快速、可编程包处理&#xff08;ACM&#xff0c;2018&#xff09;xdp-t…

Zabbix 中网络设备(交换机和防火墙)的报警信息配置指南

简述 本文介绍配置 Zabbix 以监控网络设备&#xff08;如交换机和防火墙&#xff09;并发送钉钉报警信息&#xff0c;我将提供一个详细的步骤指南。 请确保你已经完成了以下前提条件&#xff1a; 1. Zabbix 已经搭建完成。2. 网络设备&#xff08;交换机和防火墙&#xff09…

空状态设计教程:连接用户体验的桥梁

空状态设计是产品设计中常被忽视却又极其重要的一环。它不仅是用户旅程的起点&#xff0c;更是塑造第一印象的关键。本文将引导你如何使用强大的设计工具设计出既美观又实用的空状态&#xff0c;以提升用户体验。 空状态设计的意义 空状态作为用户与产品初次邂逅的界面&#…

PostgreSQL-04-入门篇-连接多张表

文章目录 1. 连接设置样例表PostgreSQL 左连接PostgreSQL 右连接PostgreSQL 全外连接 2. 表别名简介表别名的实际应用1) 对长表名使用表别名&#xff0c;使查询更具可读性2) 在连接子句中使用表别名3) 在自连接中使用表别名 3. INNER JOIN 内连接简介PostgreSQL INNER JOIN 示例…

【机器学习】正则化,欠拟合与过拟合(详细代码与图片演示!助你迅速拿下!!!)

目录 &#x1f354;欠拟合与过拟合 1.1 欠拟合与过拟合定义 1.2 通过代码认识过拟合和欠拟合 1.3 原因以及解决办法 &#x1f354;正则化 2.1 什么是正则化 2.2 正则化类别 &#x1f354;小结 学习目标 &#x1f340; 掌握过拟合、欠拟合的概念 &#x1f340; 掌握过…

黄山黄小徽光影乐园:思特科技打造沉浸式光影乐园解决方案,快乐指数拉满了!

01      「黄小徽儿童光影乐园」是由思特科技全力打造&#xff0c;依托行业领先的数字光影技术与交互科技&#xff0c;专为3-8岁儿童设计的全场景、全交互、全沉浸的沉浸式光影乐园解决方案。    沉浸式光影乐园解决方案-黄小徽儿童光影乐园      02      思特…

无人机之固定翼无人机的组成

固定翼无人机是根据空气动力学原理设计机翼的形状&#xff0c;靠动力装置产生推力或者拉力&#xff0c;使无人机获得一定速度后&#xff0c;会导致空气在飞机上下表面的压力不同&#xff0c;进而产生升力&#xff0c;其升力主要来源于固定的机翼。大多数都是由机翼、机身、尾翼…

ultralytics实例分割mask读取

在前面学习YOLOv8的实例分割过程中&#xff0c;需要使用实例分割的数据集&#xff0c;其标签的标注格式如下&#xff1a; 实例分割勾勒轮廓 其中&#xff0c;第一个数字代表的是类别编号&#xff0c;后面的数据代表的是标注的坐标&#xff08;转换到0-1之间&#xff09;每两个…

编程修炼之Hibernate--- springboot启动初始化ddl过程与如何自定义修改 table 字段长度

文章目录 springboot启动初始化ddl过程如何自定义修改 table springboot启动初始化ddl过程 跟踪Springboot整合hibernate的启动代码&#xff1a; SessionFactoryImpl 的初始化里做了非常多的事情&#xff0c;初始化各种资源&#xff0c;并调用 SchemaManagementToolCoordinat…

c语言基础--------字符串指针

在 C 语言中&#xff0c;字符串指针是一个指向字符类型的指针&#xff0c;通常用于指向字符串的第一个字符。字符串在 C 语言中通常表示为字符数组&#xff0c;而字符串指针则是用来存储这种字符数组首地址的变量。 定义字符串指针 字符串指针的定义方式如下&#xff1a; ch…

Android更改包名和签名

一、更改包名 1、包名——鼠标右键——Refactor——Rename 修改自己想更改的包名和选择更改范围后点击Refactor就可以了 2.手动修改app的build.gradle文件中的applicationId&#xff08;改成和我们之前修改的包名相同&#xff09; 3.修改AndroidManifest.xml文件中的packag…