1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
//my.cpp
#include "stdio.h"
#include "conio.h"
#include "my.h"
char s_fname[] = "e:\\abc.xx"; //保存数据的文件,全路径
void TBL::AddElem(ELEM &a)
{
e[cnt++] = a;
}
void TBL::AddElemProc()
{
ELEM e;
printf_s("\n追加元素");
do {
if (cnt == N) { printf_s("表已满!!!");break; }
InputElem(e);
AddElem(e);
printf_s("\n是否继续(y/n):");
} while ((_getch() & 0x5f) == 'Y');
}
bool TBL::DeleteElem(int pos)
{//删除元素
//参数:pos是被删元素的位置
//返回值: 真=删除成功, 否则,失败
bool v = false;
if (pos <= cnt) {
v = true;
for (; pos < cnt; pos++) e[pos - 1] = e[pos];
cnt--;
}
return v;
}
void TBL::DeleteElemProc()
{
int pos;
printf_s("\n\n删除操作");
printf_s("\n\n输入删除元素的位置序号:");
scanf_s("%d", &pos);
if (DeleteElem(pos))
printf_s("\n\n操作成功");
else
printf_s("\n\n操作失败");
}
bool TBL::InsertElem(int pos, ELEM &pe)
{//插入操作
//参数:pos=插入位置,e是待插入元素
//返回值:真=插入成功, 否则,失败
bool val = false;
int i;
if (cnt < N && pos <= cnt + 1)
{ val = true;
for (i = cnt; i >= pos; i--) e[i] = e[i - 1];
e[i] = pe;
cnt++;
}
return val;
}
void TBL::InsertElemProc()
{
ELEM e; int pos;
printf_s("\n\n插入操作");
printf_s("\n\n输入插入元素的位置序号:");
scanf_s("%d", &pos);
InputElem(e);
if (InsertElem(pos, e))
printf_s("\n\n操作成功");
else
printf_s("\n\n操作失败");
}
void TBL::InitTbl()//初始化表
{
FILE *h;
cnt = 0;//设置空表
h = fopen(s_fname, "rb+");
if (h != NULL)
{
this->cnt = fread(this->e, sizeof(ELEM), N, h);
fclose(h);
}
}
void TBL::InputElem(ELEM &a)
{ char s[11];
printf_s("\n输入学号:");
gets_s(a.num);
printf_s("\n输入姓名:");
gets_s(a.name);
printf_s("\n输入性别('1'=男,'0'=女):");
a.sex=_getch();
_putch(a.sex);
a.sex -= '0';
printf_s("\n出生日期(年-月-日):");
gets_s(s,11);
a.date.Set(s);
}
void TBL::DisplayElem()
{
int i;
char sex[][4] = { "女","男" };
printf_s("\n%15s%12s%8s%10s", "学号", "姓名", "性别", "出生日期");
for (i = 0; i < cnt; i++)
printf_s("\n%15s%12s%8s%6d-%d-%d", e[i].num, e[i].name, sex[e[i].sex], e[i].date.year, e[i].date.month, e[i].date.day);
}
void DATE_B::Set(char s[])
{
for (year = 0; s[0] != '-'; s++)
year = year * 10 + s[0] - '0';
for (month = 0, s++; s[0] != '-'; s++)
month = month * 10 + s[0] - '0';
for (day= 0, s++; s[0]; s++)
day = day * 10 + s[0] - '0';
}
|