课程设计
所谓的课程设计。。很囧。
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define W struct Worker
//职工结构体
struct Worker {
int id; //职工号
char name[20]; //职工姓名
char sex; //性别,M或者F
int age; //年龄
char workTime[12]; //工作开始日期。格式:YYYY-MM-HH ,如2010-06-06
char degree[10]; //学历
char title[10]; //职位
char partyTime[12]; //入党时间
char isMarried; //婚否,Y或N
char nativePlace[20]; //籍贯
char address[50]; //通讯地址
char tel[15]; //电话号码
char department[20]; //所在部门
char email[30]; //邮箱地址
char selfIntro[150]; //个人简介
struct Worker *next; //下个节点地址
};
//全局变量
/*char *adminId;
char *adminPwd;*/
W* workers = NULL; //整个职工列表头结点
//函数说明
void showMainMenu();
char* loadProperty(FILE*);
void login();
W* create();
W* input(W*);
void output(W*);
W* add(W*,W*);
W* search();
W* searchById(W*,int);
W* searchByName(W*,char*);
W* searchByDep(W*,char*);
W* searchByNP(W*,char*);
W* del(W*);
W* remove(W*,int);
void modify();
W* edit(W*,int);
W* sortByAgeHelper(W*,W*);
W* sortByAge(W*);
W* sortById(W*);
char* getProperty(char*);
void init();
void sort();
void insert();
void doOutput();
void doDel();
void printing();
void exitAndSave();
//主函数
void main() {
login();
return;
}
//显示主菜单函数
void showMainMenu() {
int select;
printf("==============主菜单===============");
printf("\n1.浏览全部");
printf("\n2.录入");
printf("\n3.编辑");
printf("\n4.删除");
printf("\n5.排序");
printf("\n6.查找");
printf("\n7.打印");
printf("\n8.系统设置");
printf("\n9.保存并退出");
printf("\n0.退出\n\n");
printf("请选择:");
scanf("%d",&select);
switch(select) {
case 1:
doOutput();
break;
case 2:
insert();
break;
case 3:
modify();
break;
case 4:
doDel();
break;
case 5:
sort();
break;
case 6:
search();
break;
case 7:
printing();
break;
case 8:
break;
case 9:
exitAndSave();
break;
case 0:
exit(0);
break;
default :
showMainMenu();
}
}
/**
* 读取属性函数
*/
char* loadProperty(FILE* file,char* key) {
char* value;
char properties[255];
char* result;
// FILE* file;
//file = fopen(filePath,"r");
if(file == NULL) {
printf("文件读取错误!请检查文件\"%s\"是否存在!程序即将退出。\n","a");
system("pause");
exit(0);
}
else {
fgets(properties,255,file);
result = strtok(properties,"=");
while(strcmp(result,key) != 0) {
fgets(properties,255,file);
result = strtok(properties,"=");
}
if(strcmp(result,key) == 0) {
result = strtok(NULL,"=");
result = getProperty(result);
return result;
}
}
return 0;
}
//登录函数
void login() {
char userName[255];
char userPwd[255];
char systemName[255];
FILE* file;
file = fopen("Mysys.properties","r");
printf("=================================================\n");
printf("========欢迎使用%s职工管理系统========\n",loadProperty(file,"systemName"));
printf("=================================================\n");
printf("==============请登录===============");
printf("%s","\n请输入用户名:");
scanf("%s",userName);
printf("%s","\n请输入密码:");
scanf("%s",userPwd);
if(strcmp(userName,loadProperty(file,"adminId")) == 0 && strcmp(userPwd,loadProperty(file,"adminPwd")) == 0) {
printf("\n登录成功!\n");
init();
showMainMenu();
}
else {
printf("\n用户名或密码错误,请重新登录!\n");
login();
}
fclose(file);
}
//创建链表函数
W* create() {
W* list = (W*)malloc(sizeof(W));
input(list);
workers = list;
return list;
}
//输入函数
W* input(W* aWorker) {
printf("-------------请输入职工信息------------------\n");
printf("职工号:");
scanf("%d",&aWorker->id);
printf("姓名:");
scanf("%s",aWorker->name);
printf("年龄:");
scanf("%d",&aWorker->age);
fflush(stdin); //清空标准输入缓存
printf("性别(M/F):");
scanf("%c",&aWorker->sex);
fflush(stdin); //清空标准输入缓存
printf("婚否(Y/N):");
scanf("%c",&aWorker->isMarried);
printf("籍贯:");
scanf("%s",aWorker->nativePlace);
printf("学历:");
scanf("%s",aWorker->degree);
printf("所在部门:");
scanf("%s",aWorker->department);
printf("通讯地址:");
scanf("%s",aWorker->address);
printf("电话号码:");
scanf("%s",aWorker->tel);
printf("电子邮箱:");
scanf("%s",aWorker->email);
printf("参加工作时间(YYYY-MM-DD):");
scanf("%s",aWorker->workTime);
printf("入党时间(YYYY-MM-DD):");
scanf("%s",aWorker->partyTime);
printf("个人简介(100字以内):");
scanf("%s",aWorker->selfIntro);
aWorker->next = 0;
return aWorker;
}
//输出函数
void output(W* list) {
if(list != NULL) {
W *p,*q;
p = list;
q = list;
printf("==================职工信息=============================\n");
do {
if(q != NULL) {
printf("------------------------------------------------------\n");
printf("职工号:%d\t姓名:%s\n",q->id,q->name);
printf("年龄:%d\t性别:%c\n",q->age,q->sex);
printf("婚否:%c\t籍贯:%s\n",q->isMarried,q->nativePlace);
printf("学历:%s\t所在部门:%s\n",q->degree,q->department);
printf("通讯地址:%s\t电话号码:%s\n",q->address,q->tel);
printf("电子邮箱:%s\t参加工作时间:%s\n",q->email,q->workTime);
printf("入党时间:%s\n",q->partyTime);
printf("个人简介:%s\n",q->selfIntro);
}
p = q;
q = p->next;
} while (p->next != NULL);
}
else {
printf("没有相关职工信息!\n");
}
}
//录入函数(按职工号排序)
W* add(W* list,W* aWorker) {
W* head;
W *p,*q;
p = q = head = list;
if(aWorker->id < p->id) {
aWorker->next = list;
head = aWorker;
return head;
}
else if(aWorker->id == p->id) {
printf("\n错误:录入失败,职工号重复。\n");
return list;
}
else {
while(p->next != 0) {
q = p;
p = q->next;
if(aWorker->id > q->id && aWorker->id < p->id) {
q->next = aWorker;
aWorker->next = p;
return head;
}
}
if(aWorker->id > p->id) {
p->next = aWorker;
return head;
}
else {
printf("\n错误:录入失败,职工号重复。\n");
return head;
}
}
}
//查询函数
W* search() {
W* result;
if(workers == NULL) {
printf("\n\n没有任何可供查询的信息。\n");
}
else {
int select;
W* result;
printf("-------------查询----------\n");
printf("1.根据职工号查询\n");
printf("2.根据姓名查询\n");
printf("3.根据所在部门查询\n");
printf("4.根据籍贯查询\n");
printf("5.返回主菜单\n");
printf("\n请选择查询方式:\n");
scanf("%d",&select);
switch(select) {
case 1:
workers = sortById(workers);//
int keyId;
printf("请输入职工号:");
scanf("%d",&keyId);
if(workers != 0)
result = searchById(workers,keyId);
else
result = NULL;
break;
case 2:
char keyName[10];
printf("请输入职工姓名:");
scanf("%s",&keyName);
if(workers != 0)
result = searchByName(workers,keyName);
else
result = NULL;
break;
case 3:
char keyDep[10];
printf("请输入职工所在部门:");
scanf("%s",&keyDep);
if(workers != 0)
result = searchByDep(workers,keyDep);
else
result = NULL;
break;
case 4:
char keyNP[10];
printf("请输入职工籍贯:");
scanf("%s",&keyNP);
if(workers != 0)
result = searchByDep(workers,keyNP);
else
result = NULL;
break;
case 5:
showMainMenu();
break;
default:
search();
break;
}
if(result != NULL) {
output(result);
}
else {
printf("没有相关职工信息。\n");
}
}
int goWhere;
printf("\n\n请选择:1.继续查询\t2.返回主菜单\n");
scanf("%d",&goWhere);
if(goWhere == 1)
search();
else
showMainMenu();
return result;
}
//根据职工号查询
W* searchById(W* list,int id) {
while(list != 0) {
if(list->id == id) {
W* result = (W*)malloc(sizeof(W));
*result = *list;
result->next = NULL;
return result;
}
list = list->next;
}
return NULL;
}
//根据姓名查询
W* searchByName(W* list,char* name) {
W *result,*p,*q;
int i = 0;
while(list != 0) {
if(strcmp(list->name,name) == 0) {
i++;
if(i == 1) {
result = (W*)malloc(sizeof(W));
p = q = result;
*result = *list;
result->next = 0;
}
else {
q = (W*)malloc(sizeof(W));
*q = *list;
p->next = q;
p = q;
q->next = 0;
}
}
list = list->next;
}
return result;
}
//根据部门查询
W* searchByDep(W* list,char* dep) {
W *result,*p,*q;
int i = 0;
while(list != 0) {
if(strcmp(list->department,dep) == 0) {
i++;
if(i == 1) {
result = (W*)malloc(sizeof(W));
p = q = result;
*result = *list;
result->next = 0;
}
else {
q = (W*)malloc(sizeof(W));
*q = *list;
p->next = q;
p = q;
q->next = 0;
}
}
list = list->next;
}
return result;
}
//根据籍贯查询
W* searchByNP(W* list,char* np) {
W *result,*p,*q;
int i = 0;
while(list != 0) {
if(strcmp(list->nativePlace,np) == 0) {
i++;
if(i == 1) {
result = (W*)malloc(sizeof(W));
p = q = result;
*result = *list;
result->next = 0;
}
else {
q = (W*)malloc(sizeof(W));
*q = *list;
p->next = q;
p = q;
q->next = 0;
}
}
list = list->next;
}
return result;
}
//删除节点函数
W* remove(W* list,int id) {
W *head,*p,*q;
head = p = q = list;
if(list->id == id) {
head = list->next;
free(list);
return head;
}
while(p->next != 0) {
q = p;
p = q->next;
if(p->id == id) {
q->next = p->next;
free(p);
return head;
}
}
printf("没有相应的职工信息,删除失败。\n");
return head;
}
//删除职工函数
W* del(W* list) {
if(list != NULL) {
int key;
printf("\n请输入待删除职工信息的职工号:");
scanf("%d",&key);
return remove(list,key);
}
else {
printf("没有相应的职工信息,删除失败。\n");
return list;
}
}
//编辑节点
W* edit(W* list,int id) {
W *head,*p,*q,*next;
p = q = head = list;
while(p != 0) {
if(p->id == id) {
W* temp = (W*)malloc(sizeof(W));
//*temp = *p;
next = p->next;
input(temp);
//p->next = next;
// printf("测试测试:%d",p->id);
if(searchById(list,temp->id) != NULL) {
printf("\n新的职工号%d已经存在,编辑失败。",searchById(list,temp->id)->id);
//*p = *temp;
}
else {
*p = *temp;
p->next = next;
}
free(temp);
return head;
}
q = p;
p = q->next;
}
printf("找不到相应信息。\n");
return head;
}
//编辑职工信息
void modify() {
if(workers == NULL) {
printf("没有任何待编辑信息。\n");
}
else {
int key;
printf("========编辑职工信息==========\n");
printf("请输入待编辑的职工信息职工号:");
scanf("%d",&key);
edit(workers,key);
}
int select;
printf("\n\n请选择:1.继续编辑\t2.返回主菜单\n");
scanf("%d",&select);
if(select ==1)
modify();
else
showMainMenu();
return;
}
//按职工号排序
W* sortById(W* list) {
W *head,*p,*q,*r;
head = list;
if(head->next == 0)
return head;
p = head->next;
head->next = NULL;
while(p != 0) {
q = p;
p = q->next;
q->next = 0;
head = add(head,q);
}
return head;
}
//按年龄排序
W* sortByAge(W* list) {
W *head,*p,*q,*r;
head = list;
if(head->next == 0)
return head;
p = head->next;
head->next = NULL;
while(p != 0) {
q = p;
p = q->next;
q->next = 0;
head = sortByAgeHelper(head,q);
}
/*while(r->next != 0) {
i++;
q = p ;
p = r;
p = q->next;
r = p->next;
if(i == 1)
q->next = 0;
p->next = 0;
head = sortByAgeHelper(head,p);
}
head = sortByAgeHelper(head,r);
//p->next = 0;*/
return head;
}
//按年龄排序协助函数
W* sortByAgeHelper(W* list,W* aWorker) {
W* head;
W *p,*q;
p = q = head = list;
if(aWorker->age < p->age) {
aWorker->next = list;
head = aWorker;
return head;
}
else {
while(p->next != 0) {
q = p;
p = q->next;
if(aWorker->age >= q->age && aWorker->age <= p->age) {
q->next = aWorker;
aWorker->next = p;
return head;
}
}
if(aWorker->age > p->age) {
p->next = aWorker;
return head;
}
}
}
//排序
void sort() {
if(workers == NULL) {
printf("没有可供排序的数据!\n");
showMainMenu();
}
else {
int select;
printf("\n----------排序-------------\n");
printf("1.按职工号排序\n");
printf("2.按年龄排序\n");
scanf("%d",&select);
switch(select) {
case 1:
workers = sortById(workers);
printf("排序成功!\n");
output(workers);
printf("\n按任意键回到主菜单...\n");
system("pause");
showMainMenu();
break;
case 2:
workers = sortByAge(workers);
printf("排序成功!\n");
output(workers);
printf("\n按任意键回到主菜单...\n");
system("pause");
workers = sortById(workers);
showMainMenu();
break;
default:
sort();
}
}
}
//录入
void insert() {
if(workers == NULL) {
create();
}
else {
workers = sortById(workers);
workers = add(workers,input((W*)malloc(sizeof(W))));
}
int select;
printf("\n请选择:1.继续录入\t2.回主菜单\n");
scanf("%d",&select);
switch(select) {
case 1:
insert();
default:
showMainMenu();
}
}
//浏览全部
void doOutput() {
output(workers);
printf("\n\n按任意键返回主菜单...\n");
system("pause");
showMainMenu();
}
//删除模块
void doDel() {
workers = del(workers);
printf("\n\n请选择:1.继续删除\t2.返回主菜单");
int select;
scanf("%d",&select);
if(select == 1)
doDel();
else
showMainMenu();
}
//打印模块
void printing() {
if(workers != NULL) {
W* q;
q = workers;
printf("--------------------\n");
printf("正在打印...\n");
printf("--------------------\n");
/* VC++不支持
fprintf(stdprn,"=================职工信息表===================\n");
while(q != 0) {
fprintf(stdprn,"------------------------------------------------------\n");
fprintf(stdprn,"职工号:%d\t姓名:%s\n",q->id,q->name);
fprintf(stdprn,"年龄:%d\t性别:%c\n",q->age,q->sex);
fprintf(stdprn,"婚否:%c\t籍贯:%s\n",q->isMarried,q->nativePlace);
fprintf(stdprn,"学历:%s\t所在部门:%s\n",q->degree,q->department);
fprintf(stdprn,"通讯地址:%s\t电话号码:%s\n",q->address,q->tel);
fprintf(stdprn,"电子邮箱:%s\t参加工作时间:%s\n",q->email,q->workTime);
fprintf(stdprn,"入党时间:%s\n",q->partyTime);
fprintf(stdprn,"个人简介:%s\n",q->selfIntro);
q = q->next;
}*/
printf("\n\n打印完成。\n");
}
else {
printf("\n没有任何信息可以打印。\n");
}
printf("\n\n任意键回到主菜单...\n");
system("pause");
showMainMenu();
}
//初始化函数
void init() {
printf("正在初始化...\n");
FILE* file = fopen("data.data","r");
if(file == NULL) {
printf("职工信息无存档。\n");
}
else {
printf("正在读入职工信息...\n");
//读入信息
W *p,*q;
int i=0;
p = q;
while(!feof(file)) {
p = (W*)malloc(sizeof(W));
p->id = atoi(loadProperty(file,"id"));
strcpy(p->name,loadProperty(file,"name"));
p->age = atoi(loadProperty(file,"age"));
p->sex = *loadProperty(file,"sex");
p->isMarried = *loadProperty(file,"isMarried");
strcpy(p->nativePlace,loadProperty(file,"nativePlace"));
strcpy(p->degree,loadProperty(file,"degree"));
strcpy(p->department,loadProperty(file,"department"));
strcpy(p->address,loadProperty(file,"address"));
strcpy(p->tel,loadProperty(file,"tel"));
strcpy(p->email,loadProperty(file,"email"));
strcpy(p->workTime,loadProperty(file,"workTime"));
strcpy(p->partyTime,loadProperty(file,"partyTime"));
strcpy(p->selfIntro,loadProperty(file,"selfIntro"));
i++;
if(i == 1) {
workers = p;
q = p;
workers->next = 0;
}
else {
q->next = p;
q = p;
p->next = 0;
}
if(strcmp(loadProperty(file,"end"),"true") == 0)
return;
}
}
fclose(file);
}
//退出模块
void exitAndSave() {
if(workers != NULL){
printf("正在储存数据....\n");
workers = sortById(workers);
W* p;
FILE *file = fopen("data.data","w");
p = workers;
while(p != 0) {
fprintf(file,"id=%d\n",p->id);
fprintf(file,"name=%s\n",p->name);
fprintf(file,"age=%d\n",p->age);
fprintf(file,"sex=%c\n",p->sex);
fprintf(file,"isMarried=%c\n",p->isMarried);
fprintf(file,"nativePlace=%s\n",p->nativePlace);
fprintf(file,"degree=%s\n",p->degree);
fprintf(file,"department=%s\n",p->department);
fprintf(file,"address=%s\n",p->address);
fprintf(file,"tel=%s\n",p->tel);
fprintf(file,"email=%s\n",p->email);
fprintf(file,"workTime=%s\n",p->workTime);
fprintf(file,"partyTime=%s\n",p->partyTime);
fprintf(file,"selfIntro=%s\n",p->selfIntro);
if(p->next != 0) {
fprintf(file,"end=false\n\n");
}
else {
fprintf(file,"end=true\n\n");
}
p = p->next;
}
printf("正在退出....\n");
fclose(file);
}
printf("退出成功!\n");
system("pause");
exit(0);
}
//getproperty
char* getProperty(char* str) {
char* head;
head = str;
while(*str != '\0') {
str++;
}
str--;
*str = '\0';
str++;
*str = NULL;
return head;
}
//系统设置
/*void settings() {
int select;
char user[255],pwd[255],systemName[255];
printf("\n==========系统设置============\n\n");
printf("1.修改单位名称\n");
printf("2.修改密码\n");
printf("3.返回主菜单\n");
scanf("%d",&select);
switch(select) {
case 1:
File file = fopen("Mysys.properties","r");
strcpy(p->nativePlace,loadProperty(file,"nativePlace"));
break;
case 2:
break;
default:
break;
}
}*/
浙公网安备 33010602011771号