📄 新建 文本文档.txt
字号:
int LinkList::GetLength() {
return m_listLength;
}
//将链表清空,释放当前所有节点。
bool LinkList::ClearList() {
if (m_pList == NULL) {
return false;
}
LNode *pTemp = NULL;
while (m_pList->next != NULL) {
pTemp = m_pList->next;
m_pList->next = pTemp->next;
delete pTemp;
}
m_listLength = 0;
return true;
}
//将position指定的节点内的数据设置为newData。
//第一个有效节点的position为1。
bool LinkList::SetNodeData(int position, int newData) {
LNode *pTemp = NULL;
if (!(GetNode(position, &pTemp))) {
return false;
}
pTemp->data = newData;
return true;
}
//得到指定位置节点的数据。
//节点索引从1到listLength。
bool LinkList::GetNodeData(int position, int &data) {
LNode *pTemp = NULL;
if (!(GetNode(position, &pTemp))) {
return false;
}
data = pTemp->data;
return true;
}
//在链表中插入一个节点。
//插入的位置由beforeWhich指定,新节点插入在beforeWhich之前。
//beforeWhich的取值在1到ListLength+1之间。
bool LinkList::InsertNode(int beforeWhich) {
LNode *pTemp = NULL;
if (beforeWhich < 1 || beforeWhich > (m_listLength + 1)) {
return false;
}
if (!(GetNode(beforeWhich - 1, &pTemp))) {
return false;
}
LNode *newNode = new LNode;
newNode->Dat=m_listLength;
cout<<"请输入第"<< m_listLength<<"天员工情况:"<<endl;
cout<<"请输入员工编号(六位):"<<endl;
cin>>c;
strcat(c,"\n");
strcpy( newNode->num,c);
cout<<"请输入日期:"<<endl;
cin>>c;
strcat(c,"\n");
strcpy( newNode->date_t,c);
cout<<"请输入员工部门:"<<endl;
cin>>c;
strcat(c,"\n");
strcpy( newNode->depart,c);
cout<<"请输入员工职务:"<<endl;
cin>>c;
strcat(c,"\n");
strcpy( newNode->duty,c);
cout<<"备注:"<<endl;
cin>>c;
strcat(c,"\n");
strcpy( newNode->notice,c);
cout<<"员工迟到与否(请选择Y/N):"<<endl;
cin>> newNode->leave_er;
cout<<"员工早退与否(请选择Y/N):"<<endl;
cin>> newNode->come_la;
cout<<"员工病假与否(请选择Y/N):"<<endl;
cin>> newNode->sick_le;
cout<<"员工事假与否(请选择Y/N):"<<endl;
cin>> newNode->affair_le;
cout<<"员工加班与否(请选择Y/N):"<<endl;
cin>> newNode->over_time;
cout<<"员工离场与否(请选择Y/N):"<<endl;
cin>> newNode->out;
cout<<"员工放假与否(请选择Y/N):"<<endl;
cin>> newNode->holiday;
newNode->next = pTemp->next;
pTemp->next = newNode;
m_listLength++;
return true;
}
//删除一个指定的节点。
//节点位置由position指定。
//positon的值从1到listLength。
//若链表为空或指定的节点不存在则返回false。
bool LinkList::DeleteNode(int position) {
if (position < 1 || position > m_listLength) {
return false;
}
LNode *pTemp = NULL;
if (!(GetNode(position - 1, &pTemp))) {
return false;
}
LNode *pDel = NULL;
pDel = pTemp->next;
pTemp->next = pDel->next;
delete pDel;
m_listLength--;
return true;
}
//得到指定位置节点的指针。
bool LinkList::GetNode(int position, LNode **node) {
LNode *pTemp = NULL;
int curPos = -1;
pTemp = m_pList;
while (pTemp != NULL) {
curPos++;
if (curPos == position)
break;
pTemp = pTemp->next;
}
if (curPos != position) {
return false;
}
*node = pTemp;
return true;
}
//定位与指定数据相等的数据节点。
//如果在当前链表中已经存在该数据则返回该数据节点的索引号。
//若不存在这样的节点则返回0。
//节点索引从0开始到listLength。
int LinkList::LocateElem(int elem) {
LNode *pTemp = NULL;
int curIndex = 1;
pTemp = m_pList->next;
while ((pTemp != NULL) && (pTemp->data != elem)) {
pTemp = pTemp->next;
curIndex++;
}
if (pTemp == NULL) {
return 0;
}
return curIndex;
}
bool LinkList::load_file( )
{
FILE *fp;
LNode *pTemp = NULL;
if((fp=fopen("b.txt","r"))==NULL)
{ cout<<"打开失败"<<endl;
return 0;
}
LNode *newNode = new LNode;
GetNode(m_listLength , &pTemp);
while((fscanf(fp,"%d%s%s%s%s%s%d%d%d%d%d%d%d",&newNode->Dat,newNode->num,newNode->date_t,newNode->depart,newNode->duty,newNode->notice,&newNode->leave_er,&newNode->come_la,&newNode->sick_le,&newNode->affair_le,&newNode->over_time,&newNode->out,&newNode->holiday))!=EOF)
{ newNode->next=pTemp->next=NULL;
pTemp->next = newNode;
pTemp=newNode;
m_listLength++;
LNode *newNode = new LNode;
return true;
}
}
int LinkList::leaveer(int a,int b)
{ int m,n;
int k;
LNode *pT = NULL;
LNode *pTe = NULL;
m=LocateElem(a);
GetNode(m, &pT);
n=LocateElem(b);
GetNode(n, &pTe);
while(pT!=pTe)
{ k=pT->leaver_er+pT->next->leaver_er;
pT=pT->next;
}
}
class date_time
{
public:
int add_date(int,int,int);
void printdate();
date_time(int ,int,int);
int today(int days);
private:
int YEA,MON,DAT;
};
void date_time::printdate()
{
cout<<"今天的日期是:"<<endl;
cout<<YEA<<MON<<DAT<<endl;
}
date_time::date_time(int a,int b,int c)
{
FILE *fp;
fp=fopen("a.txt","r");
if(fp==NULL)
cout<<"文件无法打开"<<endl;
while(feof(fp)==0)
fscanf(fp,"%d %d %d",&a,&b,&c);
YEA=a;
MON=b;
DAT=c;
fclose(fp);
}
int date_time::add_date(int w,int k,int l)
{
int sum,leap;
switch(k)
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:cout<<"不正确的日期";break;
}
sum=sum+l;
if(w%400==0||(w%4==0&&w%100!=0))
leap=1;
else
leap=0;
if(leap==1&&k>2)
sum++;
return(sum);
}
int date_time::today(int days)
{
time_t nowtime;
struct tm *tm;
nowtime = time(0);
tm = localtime(&nowtime);
cout<<"今天是:"<<endl;
cout<<tm->tm_year + 1900<<"年"<<tm->tm_mon + 1<<"月"<<tm->tm_mday<<"日"<<endl;
nowtime = nowtime - (days * 24 * 60 * 60);
tm = localtime(&nowtime);
cout<<days<<"天前的日期是:"<<tm->tm_year + 1900<<"年"<<tm->tm_mon + 1<<"月"<<tm->tm_mday<<"日"<<endl;
return 0;
}
-------------------------------------------------------------------------------------------------------------------------------------------
#include <iostream.h> // cin 及 cout
#include <string.h> // strcpy(): 字符串复制
#include <stdlib.h> // system("cls")
#include <stdio.h> // 文件操作(写文件)
#include "list.h" // 我们要创建类 List 的对象和节点指针,所以要把类的头文件包含进来
class Operater
{
List L1;
public:
void Loop(); //主循环
void display(); //显示菜单
};
--------------------------------------------------------------------------------------------------------------------------------------------
#include "operater.h"
void Operater::display()
{
cout<<endl<<endl;
cout<<"--------------------------职工考勤管理-----------------------------"<<endl;
cout<<"1: 添加一个职工信息"<<endl;
cout<<"2: 删除一个职工信息"<<endl;
cout<<"3: 显示所有职工的姓名"<<endl;
cout<<"4: 根据姓名显示单个职工所有信息"<<endl;
cout<<"5: 根据姓名对单个职工进行编辑"<<endl;
cout<<"6: 帮助菜单"<<endl;
cout<<"7: 保存数据"<<endl;
cout<<"0: 退出系统"<<endl;
cout<<"-------------------------------------------------------------------"<<endl;
}
void Operater::Loop()
{
List L1; //List 对象
char ch[20];
nodetype *p, *head;
int i; //存放节点序号
p=L1.load(); //初始化:从外部读入数据创建链表
head=p;
display();
while(1)
{
cout<<endl<<endl;
cout<<"请输入选择(帮助选项--> 6 ): "<<endl;
cin>>ch;
system("cls");
if(L1.check(ch, "1"))
{
p=L1.insnode(0);
head=p;
system("cls");
cout<<endl;
cout<<"------------------添加一个职工信息-------------"<<endl;
cout<<"下面输入个人信息: "<<endl;
L1.editworker(p);
}
if(L1.check(ch, "2"))
{
system("cls");
cout<<endl;
cout<<"------------------删除一个职工信息------------"<<endl;
L1.dispname();
cout<<"请输入职工姓名: "<<endl;
cin>>ch;
i=L1.find2(ch);
L1.delnode(i);
}
if(L1.check(ch, "3"))
{
system("cls");
cout<<endl;
cout<<"---------------显示所有职工名字---------------"<<endl;
L1.dispname();
}
if(L1.check(ch, "4"))
{
system("cls");
cout<<endl;
cout<<"--------------根据姓名显示单个职工所有信息 --------------"<<endl;
L1.dispname();
cout<<"请输入职工姓名: "<<endl;
cin>>ch;
p=L1.find(ch);
L1.dispnode(p);
}
if(L1.check(ch, "6"))
{
display();
}
if(L1.check(ch, "7")) //保存数据
{
FILE *fp;
if((fp=fopen("student.txt", "w"))==NULL)
{
cout<<"打开文件失败"<<endl;
return;
}
int i;
char t[255];
//将 L1.listlen() 赋予字符串中的数字
sprintf(t, "The Length Of Link: %d\n", L1.listlen()) ;\\把整数L1.listlen() 打印成一个字符串保存在t 中。
fputs(t, fp); \\打印“the length of link:L1.listlen”覆盖原来的
strcpy(t, "\n");
fputs(t, fp); \\打印空格行
p=L1.findnode(1); //将链表头指针赋予 p
for(i=0; i<L1.listlen(); i++)
{
fputs(p->someone.name, fp);
fputs(p->someone.sex, fp);
fputs(p->someone.num, fp);
fputs(p->someone.birthday, fp);
fputs(p->someone.partment, fp);
fputs(p->someone.workyear, fp);
fputs(p->someone.E-mail, fp);
fputs(p->someone.telphone, fp);
fputs(p->someone.graduate, fp);
fputs(p->someone.address, fp);
fputs(p->someone.duty, fp);
fputs(p->someone.notice, fp);
fputs(p->someone.in_time, fp);
fputs(t, fp);
p=p->next;
}
p=head;
fclose(fp);
}
if(L1.check(ch, "5"))
{
char c[20];
system("cls");
cout<<endl;
cout<<"------------------根据姓名对单个员工进行编辑 --------------"<<endl;
L1.dispname();
cout<<"请输入员工姓名: "<<endl;
cin>>c;
p=L1.find(c);
system("cls");
cout<<endl<<endl;
cout<<"------------------------------------------------------------"<<endl;
cout<<"1: 编辑个人信息"<<endl;
cout<<"2: 显示个人信息"<<endl;
cout<<"3: 显示该员工所有信息"<<endl;
cout<<"4: 帮助菜单"<<endl;
cout<<"5: 返回上一级菜单"<<endl;
cout<<"------------------------------------------------------------"<<endl;
while(1)
{
cout<<endl<<endl;
cout<<"请输入选择(帮助选项--> 8 ): "<<endl;
cin>>c;
system("cls");
if(L1.check(c, "1"))
{
system("cls");
cout<<endl;
cout<<"---------------------编辑个人信息 ----------------"<<endl;
L1.editperson(p);
}
else if(L1.check(c, "2"))
{
system("cls");
cout<<endl;
cout<<"------------------显示个人信息 ------------------"<<endl;
L1.dispworker(p);
}
else if(L1.check(c, "3"))
{
system("cls");
L1.dispnode(p);
}
else if(L1.check(c, "4"))
{
system("cls");
L1.help();
}
else if(L1.check(c, "5"))
{
display();
break; //用 break 跳出本循环,不要用 return ,return 是退出程序
}
}
}
else if(L1.check(ch, "0"))
return;
}
return;
}
----------------------------------------------------------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -