数据结构课程设计::在运行程序的时候:系统中已存在数据库,不能建立新的数据库!
/* 职工工资管理系统:字段:编号,姓名,年龄,性别,基础工资,补贴工资,扣除工资,总工资。
职工工资管理系统(编号,姓名,年龄,性别,基础工资,补贴工资,扣除工资,总工资){密码启动修改模块,数据保存读入模块,数据录入模块,数据查找模块(按编号查询,姓名(包括模糊)查询),数据插入模块,数据统计模块(分别统计基础工资总数,补贴工资总数,扣除工资总数,总工资),数据删除模块,数据排序模块,总共八个模块}
要求:(1): 总工资数由算法自动计算。(2): 当系统中存在一个数据库时,不能重新建立新数据库或不能从磁盘中读取新的数据库。(3):将数据库的内容用文件的型式输出到文本文件中。(4):采用无头结点的单链表利用类型定义二。*/
现在给的警告:
Compiling...
张强 44.c
C:\Users\Administrator\Desktop\张强 44.c(130) : warning C4700: local variable 'h' used without having been initialized
在运行程序的时候:系统中已存在数据库,不能建立新的数据库!
# include<stdlib.h>
# include<string.h>
# include<stdio.h>
# include<conio.h>
typedef struct node
{/* 结点定义 */
char numb[15]; /* 职工编号 */
char name[15]; /* 职工姓名 */
int age; /* 职工年龄 */
char sex[2]; /* 职工性别 */
double jcgz; /* 基础工资 */
double btgz; /* 补贴工资 */
double kcgz; /* 扣除工资 */
double zgz; /* 总工资 */
struct node *next; /*结构指针*/
}LNode,*Link;
typedef struct link
{/* 链表定义 */
Link head,tail;
}Linklist;
/* 函数说明 */
int menu_select(); /* 主程序选择菜单 */
int menu_delselect(); /* 删除选择菜单 */
int menu_inselect(); /* 插入选择菜单 */
int menu_findselect(); /* 查找选择菜单 */
void menu_prog(Linklist h); /* 主程序执行菜单 */
void menu_delprog(Linklist *h); /* 删除执行菜单 */
void menu_inprog(Linklist *h); /* 插入执行菜单 */
void menu_findprog(Linklist h); /* 查找执行菜单 */
void playpasword(char *s); /* 密码采用*号表示 */
void setpasword(); /* 建立密码 */
void madpasword(); /* 修改密码 */
void save(Linklist h); /* 保存文件 */
void load(Linklist *h); /* 装载文件 */
void inilink(Linklist *h); /* 初始化 */
void setlink(Linklist *h); /* 建立链表 */
void printlink(Linklist h); /* 输出链表 */
void distroylink(Linklist *h); /* 消链表 */
void insert(Linklist *h); /* 插入数据 */
void inserts(Linklist *h); /* 插入任意位置数据 */
void delnumb(Linklist *h); /* 删除编号 */
void delname(Linklist *h); /* 删除姓名 */
LNode *findnumb(Linklist h); /* 查找编号 */
LNode *findname(Linklist h,char strname[],LNode *nexts); /* 查找姓名 */
void sortdata(Linklist *h); /* 数据排序 */
void madedata(Linklist *h); /* 修改数据 */
void sortsdata(Linklist h); /* 数据统计 */
int flagint(char strnum[]); /* 判字串中是否均为数字 */
int flagints(char strnum[]); /* 判字串中是*/
main()
{/*主程序*/
Linklist h;
FILE *fp;
Link head;//定义一个文件类型的指针
char cha[20],chb[20];
int i=0;
fp=fopen("pasword.exe","rb"); //以rb(二进制)形式读取文件
if(fp==NULL) setpasword(); //建立密码
else fclose(fp);
head=NULL; /* 头指针初值为空 */
system("cls"); /* 清屏 */
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf(" ************************************ \n");
printf(" * * \n");
printf(" * 数据结构课程设计实例 * \n");
printf(" * * \n");
printf(" * 职工工资管理系统 * \n");
printf(" * (无头单链表) * \n");
printf(" * * \n");
printf(" * 作者:张强 * \n");
printf(" * * \n");
printf(" * 2015年11月14日 * \n");
printf(" * * \n");
printf(" * 初始密码: 1234 * \n");
printf(" * * \n");
printf(" * * \n");
printf(" ************************************ \n");
printf("\n");
printf("\n");
fp=fopen("pasword.exe","rb");
fgets(cha,81,fp);
printf(" 请输入密码 : ");
playpasword(chb); //密码采用*号表示
while(strcmp(cha,chb)<0 || strcmp(cha,chb)>0)
{
i++;
if(i==3)
{
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf(" ************************************ \n");
printf(" * * \n");
printf(" * 密码错误无权使用!!! * \n");
printf(" * * \n");
printf(" * 谢谢 * \n");
printf(" * * \n");
printf(" * * \n");
printf(" * * \n");
printf(" * 2015年11月14日 * \n");
printf(" * * \n");
printf(" ************************************ \n");
printf("\n");
printf("\n");
scanf("%*c");
exit(0);
}
printf(" 密码错误!!!\n");
printf(" 请输入密码 :");
playpasword(chb);
}
menu_prog(h);
}
void menu_prog(Linklist h)
{ /* 主程序选项菜单执行系统 */
char ch;
for (;;)
{
switch(menu_select())
{
case 1:
if(h.head!=NULL)
{
printf("\n系统中已经存在数据库!不能新建立数据库!!!");
printf("\n请退出系统后重新操作!!!");
printf("\n");
printf("按任意键继续.........");
getchar();
break;
}
else {
inilink(&h); /* 初始化链表算法 */
setlink(&h); /* 建立链表算法 */
if(h.head!=NULL && h.head->next!=NULL) printlink(h); /* 输出链表算法 */
else if(h.head->next==NULL)
{
free(h.head); h.head=NULL;
}
printf("\n");
printf("按任意键继续.........");
getchar();
break;
}
case 2:
if(h.head==NULL) printf("请先建立链表后再进行操作!");
else {
printlink(h); /* 显示数据算法 */
printf("\n");
}
printf("按任意键继续.........");
getchar();
break;
case 3:
if(h.head==NULL) printf("请先建立链表后再进行操作!");
else {
menu_delprog(&h); /* 调用删除窗口 */
}
printf("按任意键继续.........");
getchar();
break;
case 4:
if(h.head==NULL) printf("请先建立链表后再进行操作!");
else {
menu_inprog(&h); /* 调用插入窗口 */
}
printf("按任意键继续.........");
getchar();
break;
case 5:
if(h.head==NULL) printf("请先建立链表后再进行操作!");
else {
menu_findprog(h); /* 调用查找窗口 */
}
printf("按任意键继续.........");
getchar();
break;
case 6:
if(h.head==NULL) printf("请先建立链表后再进行操作!");
else {
madedata(&h); /* 修改算法 */
}
printf("按任意键继续.........");
getchar();
break;
case 7:
if(h.head==NULL) printf("请先建立链表后再进行操作!");
else {
sortdata(&h); /* 排序算法 */
}
printf("按任意键继续.........");
getchar();
break;
case 8:
if(h.head==NULL) printf("请先建立链表后再进行操作!");
else {
sortsdata(h); /* 统计算法 */
}
printf("按任意键继续.........");
getchar();
break;
case 9:
madpasword(); /* 修改密码 */
printf("按任意键继续.........");
getchar();
break;
case 10:
save(h); /* 将程序中数据保存到磁盘文件中 */
printf("按任意键继续.........");
getchar();
break;
case 11:
if(h.head!=NULL)
{
printf("\n系统中已经存在数据库!不能打开新数据库!!!");
printf("\n请退出系统后重新操作!!!");
printf("\n");
printf("按任意键继续.........");
getchar();
break;
}
else {
inilink(&h);
load(&h); /* 将磁盘文件内容装载到内存中 */
printf("按任意键继续.........");
getchar();
break;
}
case 12:
if(h.head!=NULL)
{
printf("\n是否保存内存中的数据?(y/n): ");
scanf("%c%*c",&ch);
if(ch=='y') save(h); /* 将程序中数据保存到磁盘文件中 */
distroylink(&h);
}
exit(0);
}
}
}
void menu_delprog(Linklist *h)
{ /* 删除选项菜单执行系统 */
int i;
for(;;)
{
i=menu_delselect();
switch(i)
{
case 1:
if(h->head==NULL) printf("请先建立链表后再进行操作!");
else {
delnumb(h); /* 删除编号算法 */
}
printf("按任意键继续.........");
getchar();
break;
case 2:
if(h->head==NULL) printf("请先建立链表后再进行操作!");
else {
delname(h); /* 删除姓名算法 */
}
printf("按任意键继续.........");
getchar();
break;
case 3:
break;
}
if(i==3) break;
}
}
void menu_inprog(Linklist *h)
{ /* 插入选项菜单执行系统 */
int i;
for(;;)
{
i=menu_inselect();
switch(i)
{
case 1:
if(h->head==NULL) printf("请先建立链表后再进行操作!");
else {
insert(h); /* 插入数据算法 */
}
printf("按任意键继续.........");
getchar();
break;
case 2:
if(h->head==NULL) printf("请先建立链表后再进行操作!");
else {
inserts(h); /* 插入数据算法 */
}
printf("按任意键继续.........");
getchar();
break;
case 3:
break;
}
if(i==3) break;
}
}
void menu_findprog(Linklist h)
{ /* 选项菜单执行系统 */
Link p;
char ch,chs,sname[15];
int i;
for(;;)
{
i=menu_findselect();
switch(i)
{
case 1:
if(h.head==NULL) printf("请先建立链表后再进行操作!");
else { /* 编号查找算法 */
ch='y';
while(ch=='y')
{
p=findnumb(h); /* 从头沿 next 查找 */
if(p!=NULL)
{
printf("编号 姓名 年龄 性别 基础工资 补贴工资 扣除工资 总工资\n");
printf("%s%8s%6d%6s%11.2f%11.2f%11.2f%11.2f\n",p->numb,p->name,p->age,p->sex,p->jcgz,p->btgz,p->kcgz,p->zgz);
}
else printf("数据库中无此编号的数据!!!");
printf("\n是否重新查找另一个编号的记录?(y/n): ");
scanf("%c%*c",&ch);
}
}
printf("按任意键继续.........");
getchar();
break;
case 2:
if(h.head==NULL) printf("请先建立链表后再进行操作!");
else { /* 姓名查找算法 */
printlink(h);
chs='y'; ch='y';
while(chs=='y')
{
printf("请输入要查找记录的姓名: ");
gets(sname);
p=h.head;
while(ch=='y')
{
p=findname(h,sname,p); /* 从 p 沿 next 查找 */
if(p!=NULL)
{
printf("编号 姓名 年龄 性别 基础工资 补贴工资 扣除工资 总工资\n");
printf("%s%8s%6d%6s%11.2f%11.2f%11.2f%11.2f\n",p->numb,p->name,p->age,p->sex,p->jcgz,p->btgz,p->kcgz,p->zgz);
printf("\n是否继续查找相同姓名的记录?(y/n): ");
scanf("%c%*c",&ch);
if(ch=='y') p=p->next; /* 沿 next 查找 */
}
else {
printf("查找结束或该数据库中无此姓名的记录!!!");
break;
}
}
printf("\n是否重新进行查找操作?(y/n): ");
scanf("%c%*c",&chs);
}
}
printf("按任意键继续.........");
getchar();
break;
case 3:
break;
}
if(i==3) break;
}
}
int menu_select()
{ /* 主程序选择菜单 */
char s[8];
int c;
system("cls"); /* 清屏 */
printf("\n");
printf("\n");
printf(" ************************************ \n");
printf(" * * \n");
printf(" * * \n");
printf(" * 无头单向链表基本操作窗口 * \n");
printf(" * * \n");
printf(" * * \n");
printf(" ************************************ \n");
printf("\n");
printf(" 01:职工工资库的建立操作\n");
printf(" 02:职工工资库的显示操作\n");
printf(" 03:职工工资库的删除操作\n");
printf(" 04:职工工资库的插入操作\n");
printf(" 05:职工工资库的查找操作\n");
printf(" 06:职工工资库的修改操作\n");
printf(" 07:职工工资库的排序操作\n");
printf(" 08:职工工资库的统计操作\n");
printf(" 09:修改系统的密码操作\n");
printf(" 10:将数据存入磁盘文件\n");
printf(" 11:将磁盘文件装入内存\n");
printf(" 12:退出系统\n");
do {
printf("\n");
printf(" 输入你的选择号:1---12: ");
gets(s);
c=atoi(s);
}while(c<0||c>12);
return(c);
}
int menu_delselect()
{ /* 删除菜单系统 */
char s[8];
int c;
system("cls"); /* 清屏 */
printf("\n");
printf("\n");
printf(" ************************************ \n");
printf(" * * \n");
printf(" * * \n");
printf(" * 职工工资库的删除操作窗口 * \n");
printf(" * * \n");
printf(" * * \n");
printf(" ************************************ \n");
printf("\n");
printf(" 01:按编号删除记录\n");
printf(" 02:按姓名删除记录\n");
printf(" 03:退出\n");
do {
printf("\n");
printf(" 输入你的选择号:1---3: ");
gets(s);
c=atoi(s);
}while(c<0||c>3);
return(c);
}
int menu_inselect()
{ /* 插入菜单系统 */
char s[8];
int c;
system("cls"); /* 清屏 */
printf("\n");
printf("\n");
printf(" ************************************ \n");
printf(" * * \n");
printf(" * * \n");
printf(" * 职工工资库的插入操作窗口 * \n");
printf(" * * \n");
printf(" * * \n");
printf(" ************************************ \n");
printf("\n");
printf(" 01:插入到数据库尾部\n");
printf(" 02:插入到任意位置处\n");
printf(" 03:退出\n");
do {
printf("\n");
printf(" 输入你的选择号:1---3: ");
gets(s);
c=atoi(s);
}while(c<0||c>3);
return(c);
}
int menu_findselect()
{ /* 查找菜单系统 */
char s[8];
int c;
system("cls"); /* 清屏 */
printf("\n");
printf("\n");
printf(" ************************************ \n");
printf(" * * \n");
printf(" * * \n");
printf(" * 职工工资库的查找操作窗口 * \n");
printf(" * * \n");
printf(" * * \n");
printf(" ************************************ \n");
printf("\n");
printf(" 01:按编号查找记录\n");
printf(" 02:按姓名查找记录\n");
printf(" 03:退出\n");
do {
printf("\n");
printf(" 输入你的选择号:1---3: ");
gets(s);
c=atoi(s);
}while(c<0||c>3);
return(c);
}
void setpasword()
{ /* 建立初始密码 */
FILE *fp; char chs[20]="1234";
fp=fopen("pasword.exe","wb");
fputs(chs,fp);
fclose(fp);
}
void playpasword(char *s)
{ /* 密码采用*号表示 */
int i=0;
while(1)
{
s[i]=getch();
if(s[i]==13) break;
i++;
printf("*");
}
s[i]='\0';
}
void madpasword()
{ /* 密码修改系统 */
FILE *fp;
char cha[20],chb[20],chc[20],chd[20];
int i=0;
fp=fopen("pasword.exe","rb");
fgets(cha,81,fp);
fclose(fp);
system("cls"); /* 清屏 */
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf(" ************************************ \n");
printf(" * * \n");
printf(" * * \n");
printf(" * 课程序设计密码修改窗口 * \n");
printf(" * * \n");
printf(" * * \n");
printf(" * * \n");
printf(" ************************************ \n");
printf("\n");
printf("\n");
printf(" 请输入密码 : ");
playpasword(chb);
if(strcmp(cha,chb)==0)
{
printf("\n 输入新密码 : "); playpasword(chc);
printf("\n 确认新密码 : "); playpasword(chd);
while(strcmp(chc,chd)<0 || strcmp(chc,chd)>0)
{
i++;
if(i==3)
{
printf("\n\n");
printf(" 密码修改失败!!!"); return;
}
printf("\n 输入新密码 : "); playpasword(chc);
printf("\n 确认新密码 : "); playpasword(chd);
}
if(strcmp(chc,chd)==0)
{
fp=fopen("pasword.exe","wb");
fputs(chd,fp);
fclose(fp);
printf("\n\n");
printf(" 密码修改成功!!!!");
}
}
else {
printf("\n");
printf("\n");
printf(" ************************************ \n");
printf(" * * \n");
printf(" * * \n");
printf(" * 密码错误无权修改!! * \n");
printf(" * * \n");
printf(" * 谢谢 * \n");
printf(" * * \n");
printf(" * 如想使用本软件请与作者联系 * \n");
printf(" * * \n");
printf(" * * \n");
printf(" ************************************ \n");
printf("\n");
printf("\n");
scanf("%*c");
return;
}
}
void save(Linklist h)
{ /* 在当前目录中保存任意名字的文件 */
LNode *p; char str[15];
FILE *fp;
system("cls"); /* 清屏 */
printf("\n");
printf("\n");
printf(" ************************************ \n");
printf(" * * \n");
printf(" * * \n");
printf(" * 课程设计单链表存盘窗口 * \n");
printf(" * * \n");
printf(" * * \n");
printf(" * * \n");
printf(" ************************************ \n");
printf("\n");
printf("\n");
if(h.head==NULL) {
printf(" 系统中没有链表存在!!!\n");
printf(" 请先建链表后再存盘!!!\n");
}
else {
printf(" 输入存盘文件名(可带路径) : "); gets(str);
fp=fopen(str,"wb");
printf("\n 单链表文件 %s 存盘成功!!!\n",str);
p=h.head;
while(p!=NULL)
{
fwrite(p,sizeof(LNode),1,fp);
p=p->next;
}
fclose(fp);
}
printf("\n\n");
printf(" 按任意键返回到主窗口!");
scanf("%*c");
}
void load(Linklist *h)
{ /* 装载文件 */
LNode *p,*q=NULL; char str[30];
FILE *fp; int i=0;
system("cls"); /* 清屏 */
printf("\n");
printf("\n");
printf(" ************************************ \n");
printf(" * * \n");
printf(" * * \n");
printf(" * 课程设计双链表文件载入窗口 * \n");
printf(" * * \n");
printf(" * * \n");
printf(" * * \n");
printf(" ************************************ \n");
printf("\n");
printf("\n");
printf(" 输入载入磁盘文件名(可带路径) : "); gets(str);
fp=fopen(str,"rb");
while(fp==NULL)
{ i++;
if(i==3)
{
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf(" ************************************ \n");
printf(" * * \n");
printf(" * * \n");
printf(" * 请建立新链表后存盘保存 * \n");
printf(" * * \n");
printf(" * 选择新磁盘文件载入 * \n");
printf(" * * \n");
printf(" * * \n");
printf(" ************************************ \n");
printf("\n");
printf("\n");
scanf("%*c");
exit(0);
}
printf(" 磁盘文件 %s 不存在!\n",str);
printf(" 输入载入磁盘文件名(可带路径) : "); gets(str);
fp=fopen(str,"rb");
}
printf("\n 磁盘文件 %s 装入内存成功!!!\n",str);
h->head=(LNode *)malloc(sizeof(LNode));
h->head->next=NULL;
p=h->head;
while(!feof(fp))
{
q=(LNode *)malloc(sizeof(LNode));
if(!p)
{
printf("内存中无容量\n");
return;
}
if(1!=fread(q,sizeof(LNode),1,fp)) break;
q->next=p->next;
p->next=q;
p=q;
}
h->tail=p;
p=h->head;
h->head=h->head->next;
free(p);
fclose(fp);
printf("\n\n");
printf(" 按任意键返回到主窗口!");
scanf("%*c");
}
int flagint(char strnum[])
{ /* 判字串中是否均为数字 */
int i,flag=1;
for(i=0;strnum[i]!='\0';i++)
if(strnum[i]<'0' || strnum[i]>'9')
{
flag=0; break;
}
return flag;
}