教师工作量管理系统c语言
#include<iostream.h>
#include<string.h>
#include<fstream.h>
class stu
{
char name[20];
double much,sum;
public:
stu()
{
}
stu(char n[20],double muc)
{
strcpy(name,n);
much=muc;
}
double getsum()
{
sum=much;
return sum;
}
friend void main();
};
void main()
{
cout<<"请选择您需要的操作!"<<endl;
cout<<"操作:"<<endl;
cout<<"(0)职工数据录入"<<endl;
cout<<"(1)增加职工人员"<<endl;
cout<<"(2)删除职工人员"<<endl;
cout<<"(3)新完成的需要添加的产品数量数据"<<endl;
cout<<"查询:"<<endl;
cout<<"(4)按总产品数量查询"<<endl;
cout<<"(5)按职工姓名查询"<<endl;
cout<<"(6)输出所有职工的数据"<<endl;
cout<<"生产量排名名次"销袜<<endl;
cout<<"(7)按职工生产的总产品数量查询排名"<<endl;
cout<<"选择相关操作请输入相对的括号里的阿拉伯数字!"<弊斗升<endl;
char p;char w;
stu *s[50];
ofstream *file[50];
int i=0;
int j=0;
bool flag2=0;
do
{
cin>>p;
if((p>='0'&&p<='10'))
flag2=1;
else
cout<<"指令错误!请重新输入:"<<endl;
}while(flag2==0);
do{
switch(p)
{
case '0':
{
char c;
char name[20];double much;
do{
cout<<"请输入职工姓名"<<endl;
cin>>name;
cout<<"请输入产品数量:"<<endl;
cin>>much;
file[j]=new ofstream("d:\\document",ios::ate);
*file[j]<<"姓名"<<name<<"产品数量"<<much<<endl;
j++;
s[i]=new stu(name, much);
i++;
cout<<"数据录入成功,想继续录入吗(y/n)"<<endl;
cin>>c;
flag2=0;
do
{
if(c!='y'&&c!='n')
{
cout<<"指令错误!请重新输入!"<<endl;
cin>>c;
}
else
flag2=1;
}while(flag2==0);
}while(c=='y');
break;
}
case '1':
{
char name[20];double much;
char c;
do
{
cout<<"请输入您要增加的职工的姓名:"<<endl;
cin>>name;
cout<<"请输入产品数量"<<endl;
cin>>much;
file[j]=new ofstream("d:\\document",ios::ate);
*file[j]<<"姓名"<<name<<"产品数量"<<much<<endl;
j++;
s[i]=new stu(name, much);
i++;
cout<<"数据录入成功,想继续录入吗(y/n)"<<endl;
cin>>c;
if(c!='y'&&c!='n')
{
cout<<"指令错误租老!请重新输入!"<<endl;
cin>>c;
}
}while(c=='y');
break;
}
case '2':
{
char name[20];bool flag3=0;char c;
do{
cout<<"请输入您要删除的职工姓名:"<<endl;
cin>>name;
for(int h=0;h<i;h++)
{
if(strcmp(name,s[h]->name)==0)
{
flag3=1;
i--;
do{
s[h]=s[h+1];
h++;
}while(h<=i);
}
}
if(flag3==0)
cout<<"您要求删除的对象本来就不存在!请检查输入的正确性!";
cout<<"要继续删除吗?(y/n)"<<endl;
cin>>c;
if(c!='y'&&c!='n')
{
cout<<"指令错误!请重新输入!"<<endl;
cin>>c;
}
}while(c=='y');
break;
}
case '3':
{
char name[20];double mat;flag2=0;
char c;
do
{
cout<<"请输入您要修改的职工的姓名:"<<endl;
cin>>name;
for(int h=0;h<i;h++)
{
if(strcmp(name,s[h]->name)==0)
{
flag2=1;
cout<<"请输入新完成的产品数量:"<<endl;
cin>>mat;
s[h]->much+=mat;
cout<<"数据添加成功!";
}
}
if(flag2==0)
{
cout<<"您要修改的职工本来就不存在!请检查重新输入!"<<endl;
}
cout<<"想继续修改吗(y/n)"<<endl;
cin>>c;
if(c!='y'&&c!='n')
{
cout<<"指令错误!请重新输入!"<<endl;
cin>>c;
}
}while(c=='y');
break;
}
case '4':
{
double t;char c;
do
{
int flag1=0;
cout<<"请输入你要查询职工的总产品数量"<<endl;
cin>>t;
for(int q=0;q<i;q++)
{
if(s[q]->getsum()==t)
{
flag1=1;
cout<<"您要查询的职工是:"<<(*s[q]).name<<endl;
}
}
if(flag1==0)
cout<<"对不起!您要查询的职工不存在!"<<endl;
cout<<"您想继续查询吗?(y/n)"<<endl;
cin>>c;
if(c!='y'&&c!='n')
{
cout<<"指令错误!请重新输入!"<<endl;
cin>>c;
}
}
while(c=='y');
break;
}
case '5':
{
char n[20];int j=0;char c;
do{
int flag=0;
cout<<"请输入你要查询的职工姓名"<<endl;
cin>>n;
for(int j=0;j<i;j++)
{
if(strcmp(n,(*s[j]).name)==0)
{
flag=1;
cout<<"您要查询的职工是:"<<(*s[j]).name<<endl;
cout<<(*s[j]).name<<"的总产品数量是"<<(*s[j]).getsum()<<endl;
}
}
if(flag==0)
cout<<"对不起!您要查询的职工不存在!"<<endl;
cout<<"您想继续查询吗?(y/n)"<<endl;
cin>>c;
if(c!='y'&&c!='n')
{
cout<<"指令错误!请重新输入!"<<endl;
cin>>c;
}
}
while(c=='y');
break;
}
case '6':
{
cout<<"本系统所有职工数据如下:"<<endl;
if(i==0)
cout<<"管理系统中没有录入数据或者数据已经被删除!"<<endl;
for(int k=0;k<i;k++)
{
cout<<k+1<<" "<<"姓名:"<<" "<<s[k]->name<<"总产品数量:"<<" "<<(*s[k]).getsum() <<endl;
}
break;
}
case '7':
{
int t;stu b;
cout<<"本系统所有职工排名如下:"<<endl;
for(int x=0;x<i-1;x++)
{
t=x;
for(int y=x+1;y<i;y++)
{
if((s[t]->getsum())<(s[y]->getsum()))
t=y;
if(t!=x)
{
b=*s[x];
*s[x]=*s[t];
*s[t]=b;
}
}
}
if(i==0)
cout<<"管理系统中没有录入数据或者数据已经被删除!";
for(int k=0;k<i;k++)
{
cout<<k+1<<" "<<"姓名:"<<" "<<s[k]->name
<<"总产品数量:"<<" "<<s[k]->getsum() <<endl;
}
break;
}
case '9':
{
int t;stu b;
cout<<"本系统所以职工总产品数量排名如下:"<<endl;
for(int x=0;x<i-1;x++)
{
t=x;
for(int y=x+1;y<i;y++)
{
if((s[t]->much)<(s[y]->much))
t=y;
if(t!=x)
{
b=*s[t];
*s[t]=*s[x];
*s[x]=b;
}
}
}
if(i==0)
cout<<"管理系统中没有录入数据或者数据已经被删除!";
for(int k=0;k<i;k++)
{
cout<<k+1<<" "<<"姓名:"<<" "<<s[k]->name
<<"产品数量:"<<" "<<s[k]->getsum() <<endl;
}
break;
}
}
cout<<"您想继续进行其他操作吗?(y/n)"<<endl;
bool flag4=0;
do
{
cin>>w;
if(w!='y'&&w!='n')
cout<<"指令错误!请重新输入!"<<endl;
else
flag4=1;
}while(flag4==0);
if(w=='y')
cout<<"请输入操作代码:(0)职工数据录入;(1)增加职工人员; (2)删除职工人员; (3)新完成需要添加的产品数量数据; (4)按总产品数量查询; (5)按职工姓名查询; (6)输出所有职工的数据; (7)按职工生产的总产品数量查询排名"<<endl;
cin>>p;
}while(w=='y');
for(int x=0;x<i;x++)
{
delete s[x];
cout<<"删除所有数据成员"<<endl;
}
}
Ⅱ C语言的实训项目发几个,谢谢
案例一 贪吃蛇游戏
案例二 计算器
案例三 黑白棋游戏
案例四 迷宫问题
案例五 扫地雷游戏
案例六 速算24
案例七 数据结构CAI系统
案例八 进程调度
案例九 存储管理分区分配算法
案例十 通讯录
案例十一 学生成绩管理
案例十二 工资管理
案例十三 图书借阅管理
案例十四 教师工作量计算
Ⅲ C语言的,帮我编一下.谢谢了
主要是1、2题哇???那我就开工了,直接输入的,没经过编译,自己查一下错。
第一题:
#define MAX 0
#define MIN 1
float fun(float a[],float maxmin[])
{int i;
float average,s=0.;
maxmin[MAX]=maxmin[MIN]=a[0];
for(i=0;i<N;i++)
{s+=a[i];
if(a[i]>maxmin[MAX])maxmin[MAX]=a[i];
if(a[i]<=maxmin[MIN])maxmin[MIN]=a[i];
}
average=s/N;
return average;
}//返回的是平均分,主函数定义一个数组maxmin[2]存放兆誉亏最高分和最低分
第二题:
e.....好像n久前做过一次,找找...
哈哈,拿分拿分!!
#include<math.h>
#include<stdio.h>族神
float avxue(float (*p)[4],int n)
{int i;
float s=0,average;
for(i=0;i<4;i++)
s+=*(*(p+n)+i);
average=s/4;
return(average);
}
float avke(float (*p)[4],int n)
{float s=0,average;
int i;
for(i=0;i<4;i++)
s+=*(*(p+i)+n);
average=s/4;
return(average);
}
notpass(char *name[],float (*p)[4])
{int i,j,k,s,y=0;
float *q;
printf("\n\nThe one who did not pass twice :\n");
for(i=0;i<4;i++)
{q=*(p+i);s=0;
for(j=0;j<4;j++)
if(*(*(p+i)+j)<60)s+=1;
if(s>=2)
{y=1;
printf("%-8s ",name[i]);
for(k=0;k<4;k++)
printf("%4.2f ",*(q+k));
printf("\n");
}
}
if(y==0)printf("none!!");
}
good(char *name[],float (*p)[4])
{int i,j,k,s,x,y=0;
float *q;
printf("\n\nThe one whose average >90 or whose all >85:\n");
for(i=0;i<4;i++)
{q=*(p+i);s=0;x=0;
for(j=0;j<4;j++)
{s+=*(*(p+i)+j);
if(*(*(p+i)+j)>=85)x+=1; }
if((s>=360)||(x==4))
{y=1;
printf("%-8s ",name[i]);
for(k=0;k<4;k++)
printf("%4.2f ",*(q+k));
printf("\n");
}
}
if(y==0)printf("none!!");
}
main()
{float a[4][4]={{88,92,94,72},{99,89,88,100},{68,48,57,71},{86,87,88,97}};
float (*p)[4];
int i,j;
float average[4],average_k[4];
float s=0;
char *kecheng[]={"Math","Chinese","English","C++","average"};
char *name[]={"Smith","Billy","虚橘Bill","Tom"};
sqrt(0);
p=a;
for(i=0;i<4;i++)
{average[i]=avxue(p,i);
average_k[i]=avke(p,i);
}
printf("\t");
for(i=0;i<5;i++)
printf("%-8s",kecheng[i]);
printf("\n\n");
for(i=0;i<4;i++)
{printf("%-8s",name[i]);
for(j=0;j<4;j++)
printf("%-8.2f",*(*(p+i)+j));
printf("%-5.2f\n",average[i]);
printf("\n\n");
}
printf("average ");
for(i=0;i<4;i++)
printf("%-8.2f",average_k[i]);
notpass(name,p);
good(name,p);
getch();
printf("\n\nplz change the parameters yourself!and site my answer be the best answer!thx!\npress any key to exit!");
}
Ⅳ C语言课程设计题目
例:学生管理系统设计
设计内容:
详见视频,要求数据结构用链表,数据存储使用文件。
计算每个老师在一个学期中所教课程的总工作量。(教师单个教学任务的信息为:教师号、姓名、性别、职称、认教课程、班级、班级数目、理论课时、实验课时、单个教学任务总课时)
A、教师信息处理
(1) 输入教师授课教学信息,包括教师号、姓名、性别、职称、认教课程、班级、班级数目、理论课时、实验课时。
(2) 插入(修改)教师授课教学信息:
(3) 删除教师授课教学信息:
(4) 浏览教师授课教学信息:
B、教师工作量数据处理:
(1) 计算单个教学任务总课时。计算原则如下表:
(2) 计算一个教师一个学期总的教学工作量。总的教学工作量=所有单个教学任务总课时之和。
(3)教师数据查询:
提示:输入教师号或其他信息,即读出所有数据信息,并显示出来。
C、教师综合信息输出
提示:输出教师信息到屏幕。
链接: https://pan..com/s/1AdMlIyDVtLtuVVNf62As-Q?pwd=1111
提取码: 1111
该系统是一个进行选择题测试的考试系统,具有测试、练习功能,具有系统设置功能,具有查分和帮助功能。
一、功能要求:
1、用文件保存试题库。(每个试题包括题干、4个备选答案、标准答案)
2、试题录入:可随时增加试题到试题库中
3、试题抽取:每次从试题库中可以随机抽出N道题及每题的得分K(N、K由键盘输入)。
4、可以设置考试时间。
5、用户可以选择“考试”和“练习”两种方式。
5、答题:用户可实现输入自己的答案,“考试”时系统不能显示答案。“练习”时每一题都可以通过查看“按钮”显示标准答案。可以用“上一题”、“下一题”翻页。选择“交卷”按钮则显示得分;
6、自动判卷:系统可根据用户答案与标准答案的对比实现判卷并给出成绩。
7、考试开始系统显示倒计时。时间为零自动交卷。
二、其它要求:
1、源程序要有适当的注释,使程序容易阅读
2、至少采用文本菜单界面(如果能采用图形菜单界面更好)
3、学生可自动增加新功能模块(视情况可另外加分)
4、写出课程设计报告,具体要求见相关说明文档
链接: https://pan..com/s/1AdMlIyDVtLtuVVNf62As-Q?pwd=1111
提取码: 1111
设计内容:
设计一个简单的英语字典,输入英语单词,显示中文含义,设计要求:
链接: https://pan..com/s/1AdMlIyDVtLtuVVNf62As-Q?pwd=1111
提取码: 1111
设计内容:
设计一个学生通信录,学生通迅录数据信息构成内容可自行设计(如:姓名、家庭地址、邮政编码、电话号码等等)。该学生通信录电话簿管理程序具有加入、删除、显示和查询等功能。
设计要求:
1、 能建立、修改和增删学生通讯录
2、 具有群组工能,可以增加群组和记录。
3、 删除可以删除一条、一个群组、全部记录。
4、 查询包含模糊查询。
5、 显示可以以页面和列表方式显示。
6、 有自动排序的功能。
7、 要求:界面友好,易于操作,采用文件存储数据。
链接: https://pan..com/s/1AdMlIyDVtLtuVVNf62As-Q?pwd=1111
提取码: 1111
[设计内容]
实现一个完整的小型音像店对录像带进行管理的系统。
[设计要求]
系统要求具有以下功能:
(1) 管理音像店中的所有录像带,包括新录像带入库、录像带出租、录像带的返还、所有录像带清单的显示、根据指定条件进行查找删除录像带等各种基本操作。
(2) 客户数据维护,可以将客户分为不同等级,可以根据指定客户显示其所借录像带详细信息。
(3) 租金管理,根据所借日期自动计算所需交纳的租金。
(4) 系统要求界面美观,菜单设计合理,操作方便。
[实验提示]
音像店有两个主要的组成部分:录像带和客户。可以构造3个链表存储以下数据:
(1) 商店中所有录像带的链表;
(2) 商店所有客户的链表;
(3) 当前已出租的录像带链表;
链接: https://pan..com/s/1AdMlIyDVtLtuVVNf62As-Q?pwd=1111
提取码: 1111
[设计内容]
航空客运订票的业务活动包括:查询航线、客票预定和办理退票等。设计一个航空订票系统实现上述功能。
[设计要求]
(1) 将每条航线的有关信息存入计算机,如:终点站名、航班号、飞机号、飞行周日(星期几)、时间、乘员定额、余票量、票价,已定票客户名单和等候替补客户名单(包括姓名,所需票数);
(2) 查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞、最近一天航班的日期和余票量。
(3) 订票:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续;若已满员或余票额少于订票额,则需重新询问客户要求。若需要,可登记排队候补;
(4) 退票:根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他候补客户。
发挥想象,增加新的功能,完善系统。
系统要求界面美观,菜单设计合理,操作方便。
链接: https://pan..com/s/1AdMlIyDVtLtuVVNf62As-Q?pwd=1111
提取码: 1111
[设计内容]
某旅馆有n个等级的房间,第I等级有 个房间,每个等级的房间有 个床位(1≤i≤n)。试模拟旅馆管理系统中床位分配和回收的功能,设计能为单个旅客分配床位,在其离店便回收床位(供下次分配)的算法。
[设计要求]
(1) 旅客登记,即为旅客分配床位。输入旅客姓名、年龄、性别、到达日期和所需房间等级。分配成功时打印旅客姓名、年龄、到达日期、房间等级、房间号码和床位号码。分配不成功时,如所有等级均无床位,则打印“客满”信息;如旅客需要的等级均无空床位,则打印“是否愿意更换等级?”的询问信息。若旅客愿意更换,则重新输入有关信息,再进行分配,否则分配工作结束。
(2) 旅客离开时,即进行床位回收。输入房间等级、房间号和床位号。
链接: https://pan..com/s/1AdMlIyDVtLtuVVNf62As-Q?pwd=1111
提取码: 1111
设计内容:
职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。
设计要求:
1、系统以菜单方式工作
2、职工信息录入功能(职工信息用文件保存)--输入
3、职工信息浏览功能--输出
4、职工信息查询功能--算法
查询方式
按学历查询等
按职工号查询等
5、职工信息删除、修改功能(可选项)
6、按工号排序
链接: https://pan..com/s/1AdMlIyDVtLtuVVNf62As-Q?pwd=1111
提取码: 1111
设计内容:
图书信息包括:书号、书名、作者名、分类号、出版社、出版时间、价格等。
设计功能:
1、系统以菜单方式工作
2、图书信息录入功能(图书信息用文件保存)--输入
3、图书信息的编辑功能(插入、删除、修改)
4、图书信息浏览功能(按书号、书名、出版时间、价格等排序输出)。
5、图书信息查询功能(按书号、书名、作者名、出版社查询,提供模糊查询的功能)
链接: https://pan..com/s/1AdMlIyDVtLtuVVNf62As-Q?pwd=1111
提取码: 1111
设计内容:
实验设备信息包括:设备编号,设备种类(如:微机、打印机、扫描仪等等),设备名称,设备价格,设备购入日期,是否报废,报废日期等。
设计功能:
1、能够完成对设备的录入和修改
2、对设备进行分类统计
3、设备的破损耗费和遗损处理
4、设备的查询
要求:采用文件方式存储数据,系统以菜单方式工作
链接: https://pan..com/s/1AdMlIyDVtLtuVVNf62As-Q?pwd=1111
提取码: 1111
设计内容:
设计一个学生选修课程系统,假定有n门课程,每门课程有:课程编号,课程名称,课程性质(公共课、必修课、选修课),总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。
设计功能:
1、系统以菜单方式工作
2、课程信息录入功能(课程信息用文件保存)--输入
3、课程信息的编辑功能(插入、删除、修改)
4、课程信息浏览功能(按课程编号、课程名称、总学时、学分等排序输出)。
5、课程信息查询功能(按课程编号、课程名称、课程性质、开课学期等查询,提供模糊查询的功能)
6、学生选修课程
7、学生选课信息查询
链接: https://pan..com/s/1AdMlIyDVtLtuVVNf62As-Q?pwd=1111
提取码: 1111
设计内容:
某公司有四个销售员(编号:1-4),负责销售五种产品(编号:1-5)。每个销售员都将当天出售的每种产品各写一张便条交上来。每张便条包含内容:1)销售员的代号,2)产品的代号,3)这种产品的当天的销售额。每位销售员每天上缴1张便条。试设计一个便条管理系统。
设计功能:
1、系统以菜单方式工作
2、便条信息录入功能(便条信息用文件保存)--输入
3、收集到了上个月的所有便条后,读取销售情况
1)计算每个人每种产品的销售额。
2)按销售额对销售员进行排序,输出排序结果(销售员代号)
3)统计每种产品的总销售额,对这些产品按从高到底的顺序,输出排序结果(需输出产品的代号和销售额)(可选项)
链接: https://pan..com/s/1AdMlIyDVtLtuVVNf62As-Q?pwd=1111
提取码: 1111
设计内容:
设计出模拟手机通信录管理系统,实现对手机中的通信录进行管理。
设计功能:
(1)查看功能:选择此功能时,列出下列三类选择。
A.办公类 B.个人类 C.商务类,当选中某类时,显示出此类所有数据中的姓名和电话号码)
(2)增加功能:能录入新数据
一个结点包括:姓名、电话号码、分类(A 办公类 B 个人类 C 商务类)、电子邮件)。
例如: 杨春 13589664454 商务类 [email protected]
当录入了重复的姓名和电话号码时,则提示数据录入重复并取消录入;当通信录中超过15条信息时,存储空间已满,不能再录入新数据;录入的新数据能按递增的顺序自动进行条目编号。
(3)拔号功能:
能显示出通信录中所有人的姓名,当选中某个姓名时,屏幕上模拟打字机的效果依次显示出此人的电话号码中的各个数字,并伴随相应的拔号声音。
(4)修改功能:
选中某个人的姓名时,可对此人的相应数据进行修改
(5)删除功能:
选中某个人的姓名时,可对此人的相应数据进行删除,并自动调整后续条目的编号。
链接: https://pan..com/s/1AdMlIyDVtLtuVVNf62As-Q?pwd=1111
提取码: 1111
每个教师的信息为:教师号、姓名、性别、单位名称、家庭住址、联系电话、基本工资、津贴、生活补贴、应发工资、电话费、水电费、房租、所得税、卫生费、公积金、合计扣款、实发工资。注:应发工资=基本工资+津贴+生活补贴;合计扣款=电话费+水电费+房租+所得税+卫生费+公积金;实发工资=应发工资 - 合计扣款。
A、教师信息处理
(1) 输入教师信息
(2) 插入(修改)教师信息:
(3) 删除教师信息:
(4) 浏览教师信息:
提示:具体功能及操作参考题1。
B、教师数据处理:
(1) 按教师号录入教师基本工资、津贴、生活补贴、电话费、水电费、房租、所得税、卫生费、公积金等基本数据。
(2) 教师实发工资、应发工资、合计扣款计算。
提示:计算规则如题目。
(3) 教师数据管理
提示:输入教师号,读出并显示该教师信息,输入新数据,将改后信息写入文件
(4) 教师数据查询:
提示:输入教师号或其他信息,即读出所有数据信息,并显示出来。
(5) 教师综合信息输出
提示:输出教师信息到屏幕。
链接: https://pan..com/s/1AdMlIyDVtLtuVVNf62As-Q?pwd=1111
提取码: 1111
Ⅳ c语言课程设计—教师工作量管理系统源代码
#include<stdio.h> //标准输入、输出头文件
#include<string.h> //包含字符串函数处理头文件
#include<stdlib.h> //包含动态存储与释放函数头文件
#include<iostream> // system
#define TEALEN sizeof(teanode) //教师信息结构体长度
#define LEN sizeof(Lnode) //链表罩和旁节点长度
#define MAX 10
int SAME[MAX];
typedef struct teanode
{
char name[10]; //教师姓名
int lesson; //授课工作量
int exper; //实验工作量
int cdesign; //课程设计工作量
int gdesign; //物橡毕业设计工作量
int total; //总工作量
int pos; //排序位置
}teanode,*linknode;//教师信息结构体
typedef struct Lnode
{
char no[20]; //教师编号
linknode info; //节点信息详细指针指向教师信息结构体
struct Lnode *prior,*next; //双向链表指针域
}Lnode,*linklist;//链表节点
void newLnode();
void initlist();
void prin();
void initlist(linklist *T)
{
*T=(linklist)malloc(LEN);
(*T)->info=(linknode)malloc(TEALEN);//为头结点申请空间
(*T)->prior=*T;//设置头结点的前驱指针
(*T)->next=*T;//设置头结点的后继指针
}//初始化双向循环链表
void newLnode(linklist*p)
{
*p=(linklist)malloc(LEN);//新节点
if(!p)
{
printf("申请节点失败");
exit(0);
}
(*p)->info=(linknode)malloc(TEALEN);
}
void prin(linklist * L)
{
if(L==NULL)
{
printf("没有可以显示的信息棚宴\n");
return;
}
linklist p=(*L)->next;
// printf("********************************************************************************\n");
printf("教师编号 教师姓名 工作量排名 工作总量\n\n");
while (p!=*L)
{
printf("%7s%9s%10d%10d\n",p->no,p->info->name,p->info->pos,p->info->total);
p=p->next;
}
}
void main()
{
linklist input(linklist L);
linklist sort(linklist L);
int j;//用来判断是否结束
linklist L;
initlist(&L);
do{
system("cls");//清屏函数
printf(" ★--- 您好,欢迎进入教师工作量统计系统! ---★\n");
printf("================================================================================\n");
printf( " -------- ☆ 1.输入教师工作量信息 ☆-------- \n\n"
" -------- ☆ 2.进行教师工作量排序 ☆-------- \n\n"
" -------- ☆ 3.显示教师工作量情况 ☆-------- \n\n"
" -------- ☆ 0.退出 ☆-------- \n\n");
printf("================================================================================\n");
printf("请在0-3中选择以回车键结束:\n\n");
scanf("%d",&j);
switch(j) {
case 1:
L=input(L);
prin(&L);
printf("录入结束\n");
system("pause");
break;
case 2:
L=sort(L);
printf("排序成功\n");
system("pause");
break;
case 3:
prin(&L);
system("pause");
break;
case 0:;
break;
}
}while(j!=0);
printf("谢谢使用,再见!\n");
}//主函数结束
linklist input(linklist L)
{
linklist workload(linklist p);
linklist adworkload(linklist p);
linklist searinsert(linklist L,linklist p);
linklist sort(linklist L);
int flag=0;
char no[10];
linklist p;
p=L->next;
for(;;)
{
if(flag==1)
break;
printf("请输入教师编号输入@结束:\n\n");
scanf("%s",no);
if(no[0]=='@')
{
flag=1;
break;
}
while (p!=L)//当链表不空时
{
if (strcmp(p->no,no)==0)
{
printf("该教师编号已存在,输入需要增加的工作量\n\n");
p->prior->next=p->next;
p->next->prior=p->prior;//删除P,
p=adworkload(p);//修改P中的详细信息info指针域的内容
L=searinsert(L,p);//重新查找P的位置插入链表L中
return L;
}
p=p->next;
}//跳出循环则该教师编号第一次输入
newLnode(&p);
strcpy(p->no,no);
printf("请输入教师姓名:\n");
scanf("%s",p->info->name);
p=workload(p);
L=searinsert(L,p);
}
return L;
}
linklist adworkload(linklist p)
{
int a;
printf("请输入增加的授课工作量:\n");
scanf("%d",&a);
p->info->lesson+=a;
printf("请输入增加的实验工作量:\n");
scanf("%d",&a);
p->info->exper+=a;
printf("请输入增加的课程设计工作量:\n");
scanf("%d",&a);
p->info->cdesign+=a;
printf("请输入增加的毕业设计工作量:\n");
scanf("%d",&a);
p->info->gdesign+=a;
//p->info->pos=0;
p->info->total=p->info->lesson+p->info->exper+p->info->cdesign+p->info->gdesign;//求总工作量
return p;
}
linklist workload(linklist p)
{
printf("请输入该教师的授课工作量:\n");
scanf("%d",&(p->info->lesson));
printf("请输入该教师的实验工作量:\n");
scanf("%d",&(p->info->exper));
printf("请输入该教师的课程设计工作量:\n");
scanf("%d",&(p->info->cdesign));
printf("请输入该教师的毕业设计工作量:\n");
scanf("%d",&(p->info->gdesign));
p->info->pos=0;
p->info->total=p->info->lesson+p->info->exper+p->info->cdesign+p->info->gdesign;//求总工作量
return p;
}
linklist searinsert(linklist L,linklist p)
{//将P放置L中合适的位置
linklist tra;//遍历指针
linklist x;//P插入位置的前一个节点指针
tra=L->next;//指向第一个节点
if ((L->next==L)||(p->info->total>tra->info->total)) //第一次插入或者大于表头的情况
{
x=L;//插入表头
}
else if (p->info->total<L->prior->info->total) //小于表尾的情况
{
x=L->prior;//插入表尾
}
else
{ while (p->info->total<tra->info->total)
tra=tra->next;
x=tra->prior;//正常查找情况
}
//将P接到X后面
p->next=x->next;
p->prior=x;
x->next=p;
p->next->prior=p;
return L;
}
linklist sort(linklist L)
{
linklist sortfisrtlast(linklist L,linklist first,linklist last,int n);
int i;
for(i=0;i<MAX;i++)
SAME[i]=0;//初始化数组SAME[MAX]
linklist p,first,last;
int x,n=1,k;
p=L->next;
while (p!=L)
{
x=1;
while ((p->next->info->total!=p->info->total)&&p!=L)
{
p->info->pos=n;
p=p->next;
n++;
}
if (p==L)
return L;
else
while ((p->next->info->total==p->info->total)&&p!=L)
{
k=n;
if (x==1)
{
//k=n;
first=p;
}
p->info->pos=k;
x++;
p=p->next;
p->info->pos=k;
//保存X
SAME[k]=x;
}
n+=x-1;
if (p==L)
return L;
else
{
last=p;
p=last->next;
L=sortfisrtlast(L,first,last,k);//调用fisrt last函数
}
}
}
linklist sortfisrtlast(linklist L,linklist first,linklist last,int n)
{
if (first==last)
return L;
linklist head,posa,posb,p,t;
linklist tra;//遍历指针
linklist x;//P插入位置的前一个节点指针
posa=first->prior;//接入位置a
posb=last->next;//接入位置b
posa->next=last->next;
last->next->prior=posa;
last->next=NULL;
first->prior=NULL;//删除这段
initlist(&head);
p=first;
while (p!=NULL)
{
tra=head->next;
if ((head->next==head)||strcmp(p->no,tra->no)<0)//第一次插入或者小于当前节点
x=head;
else if (strcmp(p->no,head->prior->no)>0)
x=head->prior;
else
{
while(strcmp(p->no,tra->no)>0)
tra=tra->next;
x=tra->prior;
}
t=p;//将P接到X后
p=p->next;
t->next=x->next;
t->prior=x;
x->next=t;
t->next->prior=t;
}
printf("********************************************************************************\n");
// printf("================================================================================\n");
printf("工作量名次相同的教师名单:(按编号排序)\n\n");
printf("名次为%d教师共有%d名\n\n",n,SAME[n]);
prin(&head);
first=head->next;
last=head->prior;
posa->next=first;
first->prior=posa;
posb->prior=last;
last->next=posb;
return L;
}
Ⅵ c语言编程:使用单链表建立一个简易教师工作量表,要求:
代码如下:
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#define芹漏MAX_NAME_LENGTH11
typedefstructteacher*tea;
structteacher{
longnum;/*职工号*/
intwkld;/*工作量*/
charname[MAX_NAME_LENGTH];/*姓名*/
teanext;/*指向下一个节点的指针*/
};
/*
*复制字符串函数
*/
voidmy_strncpy(char*str,charconst*dest,size_tn){
assert(dest!=NULL);
while(n--){
*str++=*dest++;
}
*str='