自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(127)
  • 资源 (2)
  • 收藏
  • 关注

原创 pyqt5 将控件截图

pyqt5 将控件截图

2021-12-09 17:24:20 651

原创 2014 ACM/ICPC Asia Regional Shanghai Online 1006 Sawtooth

#include #include #include #include #include#includeusing namespace std; #define MAXN 9999 #define MAXSIZE 10 #define DLEN 4 class BigNum { private: int a[500]

2014-09-27 16:10:30 1147

原创 uva 11235 - Frequent values(RMQ问题)

题意:给出一个非降序排列的整数数组a1,a2,。。。an,你的任务是对于一系列询问(i,j),回答ai,ai+1,。。。,aj中出现次数最多的值所出现的次数。#include#include#include#define mx 100000+10#define max(x,y) (x)>(y) ? (x) : (y)using namespace std;int n,m,d

2013-11-07 20:17:50 1170 1

原创 uva 1428 - Ping pong (二叉索引树)

题意:一条大街上住着n个乒乓球爱好者,经常组织比赛切磋技术。每个人都有一个不同的技能值ai。每场比赛需要3个人:两名选手,一名裁判。他们有一个奇怪的规定,即裁判必须住在两名选手的中间,并且技能值也在两名选手之间。问一共能组织多少种比赛。#include#include#include#define mx 100000+10#define mm 20000+10using nam

2013-11-07 17:06:37 1140

原创 uva 1329 - Corporative Network

题意:有n个结点,初始时每个结点的父节点都不存在。你的任务是执行如下操作:           I u v:把结点u的父节点设为v,距离为|u -v|除以1000的余数。输入保证执行指令前u没有父节点。          E u :询问u到根节点的距离。#include#include#define mx 20010using namespace std;int fa[

2013-11-06 20:48:22 707

原创 uva 1160 - X-Plosives(并查集)

简单的并查集。#include#define mx 100010int fa[mx];int find(int x){ while(fa[x]!=x) x=fa[x]; return x;}int main(){ int i,x,y,cnt; while(scanf("%d",&x)!=EOF) { for(i=0;i<mx;i++) fa[i]=i;

2013-11-06 19:50:55 679

原创 uva 11997 - K Smallest Sums

题意:有k个整数数组,各包含k个元素。在每个数组中取一个元素加起来,可以得到 kk个和。求这些和中最小的k个值(从小到大输出)。#include#include#includeusing namespace std;struct node{ int s,b; node(int s,int b):s(s),b(b){}};bool operator < (node x,

2013-11-06 19:05:42 648

原创 uva 1203 - Argus

题意:Argus系统支持一个Register命令:Register Q_num Period该命令注册了一个触发器,它每Period秒就会产生一次编号为Q_num的事件。你的任务是模拟出前k个事件。如果事件同时发生,先处理Q_num小的事件。#include#includeusing namespace std;struct node{ int num,period,ti

2013-11-06 17:39:03 958

原创 uva 11991 - Easy Problem from Rujia Liu?

题意:给出一个包含n个整数的数组,你需要回答若干查询。每次询问两个整数k和v,shuc

2013-11-06 16:29:07 700

原创 uva 11995 - I Can Guess the Data Structure!

大致题意:输入1表示push,2表示pop,输出:stack:一定是个栈;queue:一定是个队列;priority:一定是个优先队列;impossible:都不是;not sure:至少有两种可能。注意:它有可能在pop前已为空,所以要先判断empty()。#include#include#include#includeusing namespace s

2013-11-05 20:25:02 899

原创 青年文摘-往世书

往事书傀儡师能做出和人几无差别的傀儡,而付出的代价,是远离凡尘。他们在死的时候,刻一只与自己一模一样的傀儡,将生命延续下去。一 重逢没有谁的箭比谢洛白更快,没有谁的枪比姬郁非更强,也没有谁,敢和曲南陵比眼睛的锐利。对于风行于晋北军中的这一说法,通常谢洛白只低头看自己的双手,姬郁非会露出看似忧郁实则骄傲的笑容,而那个倒霉的曲南陵,多半是苦着脸做一个噤声的手势:

2013-11-04 19:47:54 2774

原创 hdu 1007 Quoit Design(分治法求最近点对)

大致题意:给N个点,求最近点对的距离 d ;输出:r = d/2。// Time 2093 ms; Memory 1812 K#include#include#include#include#define eps 1e-8#define maxn 100010#define sqr(a) ((a)*(a))using namespace std;int sig(do

2013-10-31 15:22:19 1041

原创 hdu 4717 The Moving Points(三分法)

大致题意:给定 n 个起点的二维坐标和速度的大小和方向;问在哪一时刻所有两点间的最大距离最小。// Time 78 ms; Memory 1316K#include#include#include#define maxn 50000#define maxm 305#define sqr(x) ((x)*(x))#define eps 1e-5using namespac

2013-09-21 11:42:05 1029

原创 hdu 4741 Save Labman No.004 [2013年杭州ACM网络赛]

// Time 234 ms; Memory 244 K#include#include#includeusing namespace std;typedef struct point{ double x,y,z; point(double xx=0,double yy=0,double zz=0):x(xx),y(yy),z(zz){}}vector;vector op

2013-09-15 19:14:30 1243

原创 hdu 4736 This Is The Job The Bear Finds(2013年成都ACM网络赛)

#include#include#include#include#define eps 1e-10#define sqr(a) ((a)*(a))#define pi (2.0*asin(1.0))using namespace std;double ma[100010];int sig(double a){ return (a>eps)-(a<-eps);}ty

2013-09-15 10:31:36 2066

原创 hdu 4007 Dave (2011年大连ACM网络赛)

题意:给定正方形的边长 r ,在平面内寻找正方形可以圈住的点的最大的个数。分析:先对点排序,然后固定一条边,再平移另一条垂直边,得到点的个数,最后比较大小即可。注意:不包含正方形倾斜的情况!// Time 125ms; Memory 240k#include#include#includeusing namespace std;struct point{ int

2013-09-02 17:02:50 1308

原创 uva 11796 - Dog Distance

#include#include#include#define eps 1e-8#define max(a,b) a>b?a:busing namespace std;int sig(double a){ return (a>eps)-(a<-eps);}typedef struct point{ double x,y; point(double

2013-08-26 22:13:58 909

原创 uva 1342 - That Nice Euler Circuit

题意:平面上有一个包含n个点的一笔画,图案是封闭的。线段可以相交,但不会部分重叠,如图,求平面被分成多少部分。#include#include#include#define eps 1e-8using namespace std;int sig(double a){ return (a>eps)-(aeps);}typedef struct point{

2013-08-26 19:52:13 889

原创 uva 12165 - Triangle Hazard

#include#include#includeusing namespace std;typedef struct point{ double x,y; point(double xx=0,double yy=0):x(xx),y(yy){}}vector;vector operator - (point a,point b){ return vect

2013-08-23 21:44:20 1458

原创 uva 1447 - Malfatti Circles

题意:给出一个三角形的3个顶点的坐标,求3个圆,使得每个圆和三角形的两条边以及另两个圆均相切,如图,输出这3个圆的半径。 #include#include#include#define sqr(a) ((a)*(a))#define eps 1e-8#define min(a,b) (a)<(b)?(a):(b)using namespace std;int sig(

2013-08-23 12:03:10 1571 2

原创 uva 11186 - Circum Triangle

题意:在一个圆上有 n (n提示:枚举每一条边。#include#include#include#include#define pi (2.0*asin(1.0))using namespace std;int main(){ int i,j,n; double s,r,rad[505]; while(cin>>n>>r && n+r) {

2013-08-21 20:33:28 1524 1

原创 uva 10566 - Crossed Ladders

题意:如图,已知 x,y,c,其中 c 是 x 和 y 的交点到地面的距离。求“?”的长度。#include#include#include#define sqr(a) ((a)*(a))#define eps 1e-8using namespace std;int sig(double a){ return (a>eps)-(a<-eps);}i

2013-08-21 11:13:16 1107

原创 uva 12301 - An Angular Puzzle

题意:如图,已知角ACB,角CAE, 角EAB, 角CBD, 角DBA (in degrees), 求角 DEA。注意:在 Output 中,“If there is more than one solution, print "Multiple solutions"”这句话是迷惑你的,根本没有这种情况!#include#include#include#def

2013-08-20 22:17:07 1092

原创 uva 12300 - Smallest Regular Polygon

题意:给定两个点A和B,求包含这两个点的面积最小的正 n(已知)边形。#include#include#include#define pi 2.0*asin(1.0)#define sqr(a) ((a)*(a))using namespace std;int main(){ int n; double x1,x2,y1,y2,d,thy,s; whi

2013-08-20 17:42:41 990

原创 uva 11731 - Ex-circles

题意:已知三角形ABC的3条边长,求三角形ABC 的面积,以及阴影部分的总面积。#include#include#include#define sqr(a) ((a)*(a))#define pi 2.0*asin(1.0)using namespace std;type

2013-08-20 16:25:20 1104

原创 uva 11524 - InCircle (二分法)

题意:三角形ABC的内切圆把它的三边分别划分成 m1:n1,m2:n2 和 m3:n3 的比例。另外已知内切圆的半径 r ,求三角形ABC 的面积。#include#include#include#include#define sqr(a) (a)*(a)#define eps 1e-12#define min(a,b) a<b?a:b#def

2013-08-20 07:48:48 1162

原创 uva 1473 - Dome of Circus

题意:给定 n 个空间中的点,任务是找一个底面在 z=0 平面上,中心在(0,0,0)的体积最小的圆锥,包含所有点。#include#include#include#include#define pi (2.0*asin(1.0))#define div(a) ((a)*(a)*(a))#define eps 1e-6using namespace std;const

2013-08-19 19:48:45 951

原创 uva 11817 - Tunnelling the Earth

题意:从地球上的一个点到另一个点,求亮点的球面距离和直线距离之差。假定地球是正球体,半径为6371009米。#include#include#define r 6371009#define pi 2.0*asin(1.0)using namespace std;double ang(double lt1,double lt2,double lg1,double lg2){

2013-08-18 17:38:53 1021

原创 uva 11646 - Athletics Track

题意:如图,体育场的跑道一圈是400米,其中弯道是两段半径相同的圆弧。已知矩形的长宽比例为a:b,求长和宽的具体数值。注意:圆弧的圆心在纵轴线上!#include#include#includeusing namespace std;int main(){ double i=1,a,b,w,k,thy,d; char c; while(cin>>a>>

2013-08-18 16:49:24 952

原创 uva 11800 - Determine the Shape

题意:给定平面上4个点,没有3点共线;判断这4个点能组成怎样的四边形。正方形:Square矩形:Rectangle菱形:Rhombus平行四边形:Parallelogram梯形:Trapezium普通四边形:Ordinary Quadrilateral#include#includeusing namespace std;typedef struct poin

2013-08-17 21:40:55 1436

原创 uva 11437 - Triangle Fun

这是一道简单的计算几何;In the picture below you can see a triangle ABC. Point D, E and F divides the sides BC, CA and AB into ratio 1:2 respectively. That is CD=2BD, AE=2CE and BF=2AF. A, D; B, E and C, F ar

2013-08-17 20:35:20 1001

原创 导盲犬和它的主人

一天,一个盲人带着他的导盲犬过街时,一辆大卡车失去控制,直冲过来,盲人当场被撞死,他的导盲犬为了守卫主人,也一起惨死在车轮底下。主人和狗一起到了天堂门前。一个天使拦住他俩,为难地说:“对不起,现在天堂只剩下一个名额,你们两个中必须有一个去地狱。”主人一听,连忙问:“我的狗又不知道什么是天堂,什么是地狱,能不能让我来决定谁去天堂呢?”天使鄙视地看了这个主人一样,皱起了眉头,她想了想,

2013-08-11 20:36:12 901

原创 POJ 2886 Who Gets the Most Candies? (线段树)

题意:模拟约瑟夫环。有N(1并离开这个圈,他卡片上的数字 A 表明了下一个离开的小孩,如果 A 是大于 0 的,则下个离开的是左手边第 A 个,如果是小于 0 的,则是右手边的第 A 个小孩。游戏将直到所有小孩都离开,在游戏中,第 p 个离开的小孩将得到 F(p) 个糖果,F(p) 是 p 的约数的个数,问谁将得到最多的糖果。输出最幸运的小孩的名字和他可以得到的糖果。        F(p

2013-08-02 09:26:22 1552

原创 POJ 2828 Buy Tickets

题意:有n个的排队,每一个人都有一个val来对应,每一个后来人都会插入当前队伍的某一个位置pos。要求把队伍最后的状态输出。逆向思维。我们可以这样考虑,最后一个人一定会得到当前队伍他想要的位置,如果我们往前一个阶段,倒数第二个人也一定能得到他想要的位置……,也就是说,我们可以这样处理,我们把最后一个人插入,然后忽略它,再把倒数第二个人插入。即,我们找出当前队伍他想要插入的位置pos的真正坐

2013-07-31 09:30:41 1565

原创 hdu 2795 Billboard

题意:有一块板,规格为h*w,然后有n张海报,每张海报的规格为1*wi,选择贴海报的位置是:尽量高,同一高度,选择尽量靠左的地方。要求输出每张海报的高度位置。因为最多只有二十万张海报,所以板的最大的长度不会超过二十万,但是要小心,如果板的长度小于n,我们还要用h来建树。我们可以在查询到它的位置的时候,同时去更新当前点的剩余长度,然后回溯更新所有祖先区间。保存它的查询位置。// Time 1

2013-07-30 21:28:27 1853

原创 hdu 1394 Minimum Inversion Number(单点更新)

题意:给你N个数,要求统计它的所有形式的逆序对的最小值。它的所有形式的意思是,不断将数组开头的第一个数放到数组的最后面。分析:主要是利用线段树求逆序数,建的是一棵空树,然后每插入一个点之前,统计大于这个数的有多少个,直到所有的数都插入完成,就结束了逆序树的统计。要得出答案主要是利用了一个结论,如果是0到n的排列,那么如果把第一个数放到最后,对于这个数列,逆序数是减少y[i],而增加

2013-07-27 10:55:38 1398

原创 hdu 4602 Partition

题意:将一个整数 n 进行无序拆分,一共有2^(n-1)种;输入一个整数 k ,问 k 在所有拆分中出现的次数。分析:a[n][k]=a[i][k]+2^(n-k-1);(k通过归纳法得到 a[n][k]=2*a[n-1][k]+2^(n-3);(n>=3),而对所有的 k 都有a[k][k]=1,a[k+1][k]=2,........所以数组a的值与第二维k无关。那么 a[k]=1

2013-07-26 20:44:12 1135

原创 hdu 1754 I Hate It

题意:给你N个数,M个操作,操作分两类。(1)"QAB“,查询区间[A,B]内的最大值。(2)"UAB",将第A个数的值改成B。线段树-单点更新。// Time 843ms; Memory 6448K#include#include#define maxn 1<<19#define inf 1<<30using namespace std;int size,n,sm,al

2013-07-26 14:38:15 1496

原创 hdu 1166 敌兵布阵(线段树-单点更新)

题意:有N个兵营,每个兵营都给出了人数ai(下标从1开始),有四种命令,(1)”Addij",表示第i个营地增加j人。(2)“Sub i j”,表示第i个营地减少j人。(3)“Query ij",查询第i个营地到第j个营地的总人数。(4)”End“,表示命令结束。有三种操作:询问区间总和,增加某个兵营的兵的数目,减少某个兵营的兵的数目。实际上也只有两个。在更新的时候,每到一个区间就

2013-07-26 10:16:41 2006

原创 POJ 2954 Triangle (pick 定理)

题目大意:给出三个点的坐标,问在这三个点坐标里面的整数坐标点有多少个(不包含边上的)匹克定理:I = (A-E) / 2 + 1;  A: 表示多边形面积   I : 表示多边形内部的点的个数   E: 表示在多边形上的点的个数   // Time 0ms; Memory 164K#include#include#includeusing namespace std;

2013-07-25 20:36:25 1066

c语言课设-考勤管理程序

#include<stdio.h> #include<string.h> #include<stdlib.h> #define MAX 100 //最多学生人数 struct Stu1 //学生信息 { char no[10]; char name[20]; char sex[5]; int age; char classroom[20]; }; struct date //日期 { int year; int month; int day; }; struct Stu2 //考勤 { int late[MAX]; //迟到次数 int early[MAX]; //早退次数 int absence[MAX]; //旷课节数 struct date dat; }; typedef struct Stu3 //统计 { int late[MAX]; int early[MAX]; int absence[MAX]; }statistic; void input_stud() //学生信息初始化 { FILE *fp; struct Stu1 stu; int i,n; printf("\n学生人数(<=100): "); scanf("%d",&n); if((fp=fopen("student1.dat","wb+"))==NULL) { printf("\t>>不能建立student1.dat文件\n"); exit(0); } printf("\n******************************************************************************\n"); printf("学号 \t姓名\t性别\t年龄\t班级\n"); for(i=0;i<n;i++) { scanf("%s%s%s%d%s",stu.no,stu.name,stu.sex,&stu.age,stu.classroom); fwrite(&stu,sizeof(struct Stu1),1,fp); } printf("******************************************************************************\n"); fclose(fp); } void add_stud() //添加学生 { FILE *fp; struct Stu1 stu,stun; int i,n,t; if((fp=fopen("student1.dat","ab+"))==NULL) if((fp=fopen("student1.dat","wb+"))==NULL) { printf("\t>>不能建立student1.bin文件\n"); exit(0); } fseek(fp,0,2); n=ftell(fp)/sizeof(struct Stu1); printf("\n******************************************************************************\n"); printf(" 输入信息: 学号 \t姓名\t性别\t年龄\t班级\n"); printf(" 学生信息: "); scanf("%s%s%s%d%s",stun.no,stun.name,stun.sex,&stun.age,stun.classroom); printf("1,确定 2,取消\n"); printf("请选择: "); scanf("%d",&t); switch(t) { case 1:rewind(fp); i=0; while(i<n) { fread(&stu,sizeof(struct Stu1),1,fp); if(strcmp(stun.no,stu.no)==0) break; i++; } if(i<n) printf("\t>>学号重复\n"); else { fseek(fp,0,2); fwrite(&stun,sizeof(struct Stu1),1,fp); }break; case 2:break; } printf("******************************************************************************\n"); fclose(fp); } void update_stud() //按学号修改学生信息 { FILE *fp; struct Stu1 stu; int i,n,t; char no[10]; if((fp=fopen("student1.dat","rb+"))==NULL) { printf("\t>>不能打开student1.dat文件\n"); exit(1); } fseek(fp,0,2); n=ftell(fp)/sizeof(struct Stu1); printf("\n******************************************************************************\n"); printf("要修改的学号: "); scanf("%s",no); i=0; rewind(fp); while(i<n) { fread(&stu,sizeof(struct Stu1),1,fp); if(strcmp(stu.no,no)==0) break; i++; } if(i<n) { printf("输入 姓名 性别 年龄 班级: "); scanf("%s %s %d %s",stu.name,stu.sex,&stu.age,stu.classroom); printf("1,确定 2,取消\n"); printf("请选择: "); scanf("%d",&t); switch(t) { case 1:fseek(fp,-(long)sizeof(struct Stu1),1); fwrite(&stu,sizeof(struct Stu1),1,fp);break; case 2:break; } } else printf("\t>>无该学号的学生\n"); printf("******************************************************************************\n"); fclose(fp); } void create_attend(int t) //考勤记录 { FILE *fp1,*fp2; int i,n,p; struct Stu1 stu; struct Stu2 attend; switch(t) { case 2:if((fp1=fopen("student2.dat","ab+"))==NULL) { printf("\t>>不能打开student2.dat文件\n"); exit(0); } break; case 1:if((fp1=fopen("student2.dat","wb+"))==NULL) { printf("\t>>不能建立student2.dat文件\n"); exit(0); } } fseek(fp1,0,2); if((fp2=fopen("student1.dat","rb+"))==NULL) { printf("\t>>不能打开student1.dat文件\n"); exit(2); } fseek(fp2,0,2); n=ftell(fp2)/sizeof(struct Stu1); printf("\n年.月.日: "); scanf("%d%d%d",&attend.dat.year,&attend.dat.month,&attend.dat.day); printf("\n******************************************************************************\n"); printf("学号 \t姓名\t迟到\t早退\t旷课\n"); rewind(fp2); for(i=0;i<n;i++) { fread(&stu,sizeof(struct Stu1),1,fp2); printf("%s\t%s\t",stu.no,stu.name); scanf("%d%d%d",&attend.late[i],&attend.early[i],&attend.absence[i]); } printf("******************************************************************************\n"); for(;i<MAX;i++) { attend.late[i]=attend.early[i]=attend.absence[i]=0; } printf("1,确定 2,取消\n"); printf("请选择: "); scanf("%d",&p); switch(p) { case 1:fwrite(&attend,sizeof(struct Stu2),1,fp1);break; case 2:break; } fclose(fp1); fclose(fp2); } void get_attend() //按学号显示 { FILE *fp1,*fp2; int i,n,m; char s[10]; struct Stu1 stu; struct Stu2 attend; if((fp1=fopen("student1.dat","rb+"))==NULL) { printf("\t>>不能打开student1.dat文件\n"); exit(3); } fseek(fp1,0,2); n=ftell(fp1)/sizeof(struct Stu1); rewind(fp1); if((fp2=fopen("student2.dat","rb+"))==NULL) { printf("\t>>不能打开student2.dat文件\n"); exit(4); } fseek(fp2,0,2); m=ftell(fp2)/sizeof(struct Stu2); if(m>0) rewind(fp2); printf("\n学号: "); scanf("%s",s); for(i=0;i<n;i++) { fread(&stu,sizeof(struct Stu1),1,fp1); if(strcmp(s,stu.no)==0) break; } if(i==n) printf("对不起,该学号不存在,谢谢!\n"); else { printf("\n******************************************************************************\n"); printf("%s %s %s %d %s\n\n",stu.no,stu.name,stu.sex,stu.age,stu.classroom); printf("迟到\t早退\t旷课\t扣学分\t日期\n"); while(m) { fread(&attend,sizeof(struct Stu2),1,fp2); printf("%d\t%d\t%d\t%.1f\t%d-%d-%d\n",attend.late[i],attend.early[i],attend.absence[i],-0.5*attend.absence[i],attend.dat.year,attend.dat.month,attend.dat.day); m--; } printf("******************************************************************************\n"); } fclose(fp1); fclose(fp2); } void disp_attend() //按日期显示 { FILE *fp1,*fp2; int i,n,x,y,m,d; struct Stu1 stu; struct Stu2 attend; if((fp1=fopen("student1.dat","rb+"))==NULL) { printf("\t>>不能打开student1.dat文件\n"); exit(5); } fseek(fp1,0,2); n=ftell(fp1)/sizeof(struct Stu1); rewind(fp1); if((fp2=fopen("student2.dat","rb+"))==NULL) { printf("\t>>不能打开student2.dat文件\n"); exit(6); } fseek(fp2,0,2); x=ftell(fp2)/sizeof(struct Stu2); if(x>0) rewind(fp2); printf("\n日期: "); scanf("%d%d%d",&y,&m,&d); while(x) { fread(&attend,sizeof(struct Stu2),1,fp2); if(y==attend.dat.year && m==attend.dat.month && d==attend.dat.day) break; x--; } if(x==0) printf("对不起,该日期不存在,谢谢!\n"); else { printf("\n******************************************************************************\n"); printf("学号 \t姓名\t性别\t年龄\t班级\t迟到\t早退\t旷课\t扣学分\n"); rewind(fp2); for(i=0;i<n;i++) { fread(&stu,sizeof(struct Stu1),1,fp1); printf("%s\t%s\t%s\t%d\t%s\t%d\t%d\t%d\t%.1f\n",stu.no,stu.name,stu.sex,stu.age,stu.classroom,attend.late[i],attend.early[i],attend.absence[i],-0.5*attend.absence[i]); } printf("******************************************************************************\n"); } fclose(fp1); fclose(fp2); } void disp_stud() //显示学生信息 { FILE *fp; int i,n,t; struct Stu1 stu; if((fp=fopen("student1.dat","rb+"))==NULL) { printf("\t>>不能打开student1.dat文件\n"); exit(5); } fseek(fp,0,2); n=ftell(fp)/sizeof(struct Stu1); rewind(fp); printf("\n******************************************************************************\n"); printf("学号 \t姓名\t性别\t年龄\t班级\n"); for(i=0;i<n;i++) { fread(&stu,sizeof(struct Stu1),1,fp); printf("%s\t%s\t%s\t%d\t%s\n",stu.no,stu.name,stu.sex,stu.age,stu.classroom); } printf("******************************************************************************\n"); printf("\n1,修改 0,退出\n"); printf("请选择: "); while(scanf("%d",&t)==1) { if(t==0) break; update_stud(); printf("\n1,修改 0,退出\n"); printf("请选择: "); } fclose(fp); } void find_attend() //查找(修改和显示) { FILE *fp1,*fp2; struct Stu1 stu; struct Stu2 attend; char s[10]; int i,n,x,t,p,y,m,d,q; printf("\n1,修改 2,显示 0,返回\n"); if((fp1=fopen("student1.dat","rb+"))==NULL) { printf("\t>>不能打开student1.dat文件\n"); exit(7); } fseek(fp1,0,2); n=ftell(fp1)/sizeof(struct Stu1); rewind(fp1); if((fp2=fopen("student2.dat","rb+"))==NULL) { printf("\t>>不能打开student2.dat文件\n"); exit(8); } fseek(fp2,0,2); x=ftell(fp2)/sizeof(struct Stu2); if(x>0) rewind(fp2); printf("请选择: "); while(scanf("%d",&t)==1) { if(t==0) break; p=x; printf("\n学号、日期: "); scanf("%s%d%d%d",s,&y,&m,&d); rewind(fp1); rewind(fp2); for(i=0;i<n;i++) { fread(&stu,sizeof(struct Stu1),1,fp1); if(strcmp(s,stu.no)==0) break; } if(i==n) printf("对不起,该学号不存在,谢谢!\n"); else { while(p) { fread(&attend,sizeof(struct Stu2),1,fp2); if(y==attend.dat.year && m==attend.dat.month && d==attend.dat.day) break; p--; } if(p==0) printf("对不起,该日期不存在,谢谢!\n"); else { printf("\n******************************************************************************\n"); switch(t) { case 1: printf("输入迟到次数,早退次数,旷课节数: "); scanf("%d%d%d",&attend.late[i],&attend.early[i],&attend.absence[i]); printf("1,确定 2,取消\n"); printf("请选择: "); scanf("%d",&q); switch(q) { case 1:fseek(fp2,-(long)sizeof(struct Stu2),1); fwrite(&attend,sizeof(struct Stu2),1,fp2);break; case 2:break; }break; case 2: printf("学号 \t姓名\t性别\t年龄\t班级\t迟到\t早退\t旷课\t扣学分\n"); printf("%s\t%s\t%s\t%d\t%s\t%d\t%d\t%d\t%.1f\n",stu.no,stu.name,stu.sex,stu.age,stu.classroom,attend.late[i],attend.early[i],attend.absence[i],-0.5*attend.absence[i]); } printf("******************************************************************************\n"); } } system("pause"); system("cls"); printf("\n1,修改 2,显示 0,返回\n"); printf("请选择: "); } fclose(fp1); fclose(fp2); } void total_attend() //统计(单个显示和全显示) { FILE *fp1,*fp2; statistic s; struct Stu1 stu; struct Stu2 attend; int i,n,x,t,y1,m1,d1,y2,m2,d2; char str[10]; printf("\n起始时间: "); scanf("%d%d%d",&y1,&m1,&d1); printf("终止时间: "); scanf("%d%d%d",&y2,&m2,&d2); if((fp1=fopen("student1.dat","rb+"))==NULL) { printf("\t>>不能打开student1.dat文件\n"); exit(9); } fseek(fp1,0,2); n=ftell(fp1)/sizeof(struct Stu1); rewind(fp1); if((fp2=fopen("student2.dat","rb+"))==NULL) { printf("\t>>不能打开student2.dat文件\n"); exit(10); } fseek(fp2,0,2); x=ftell(fp2)/sizeof(struct Stu2); if(x>0) rewind(fp2); for(i=0;i<n;i++) { s.late[i]=0;s.early[i]=0;s.absence[i]=0; } while(x) { fread(&attend,sizeof(struct Stu2),1,fp2); if(y1==attend.dat.year && m1==attend.dat.month && d1==attend.dat.day) break; x--; } x--; while(x) { for(i=0;i<n;i++) { s.late[i]+=attend.late[i];s.early[i]+=attend.early[i];s.absence[i]+=attend.absence[i]; } fread(&attend,sizeof(struct Stu2),1,fp2); if(y2==attend.dat.year && m2==attend.dat.month && d2==attend.dat.day) break; x--; } if(x==0) printf("对不起,错误!\n"); else { for(i=0;i<n;i++) { s.late[i]+=attend.late[i];s.early[i]+=attend.early[i];s.absence[i]+=attend.absence[i]; } printf("\n1,单个显示 2,全显示 0,返回\n"); printf("请选择: "); while(scanf("%d",&t)==1) { if(t==0) break; printf("\n******************************************************************************\n"); switch(t) { case 1:rewind(fp1); printf("学号: "); scanf("%s",str); for(i=0;i<n;i++) { fread(&stu,sizeof(struct Stu1),1,fp1); if(strcmp(str,stu.no)==0) break; } if(i==n) printf("对不起,该学号不存在,谢谢!\n"); else { printf("%s %s %s %d %s\n",stu.no,stu.name,stu.sex,stu.age,stu.classroom); printf("迟到\t早退\t旷课\t扣学分\n"); printf("%d\t%d\t%d\t%.1f\n",s.late[i],s.early[i],s.absence[i],-0.5*s.absence[i]); } break; case 2:rewind(fp1); printf("学号 \t姓名\t性别\t年龄\t班级\t迟到\t早退\t旷课\t扣学分\n"); for(i=0;i<n;i++) { fread(&stu,sizeof(struct Stu1),1,fp1); printf("%s\t%s\t%s\t%d\t%s\t%d\t%d\t%d\t%.1f\n",stu.no,stu.name,stu.sex,stu.age,stu.classroom,s.late[i],s.early[i],s.absence[i],-0.5*s.absence[i]); } } printf("******************************************************************************\n"); system("pause"); system("cls"); printf("\n1,单个显示 2,全显示 0,返回\n"); printf("请选择: "); } } fclose(fp1); fclose(fp2); } struct Stu2 f(struct Stu2 at1,int i,int n) { int j; for(j=i;j<n;j++) { at1.late[j]=at1.late[j+1];at1.early[j]=at1.early[j+1];at1.absence[j]=at1.absence[j+1]; } return at1; } void del_stud() //删除 { FILE *fp1,*fp2; struct Stu1 st1,stt[MAX]; struct Stu2 at1,att[300]; int i,j=0,t,n,x,p; char no[10]; if((fp1=fopen("student1.dat","rb+"))==NULL) { printf("\t>>不能打开student1.dat文件\n"); exit(11); } fseek(fp1,0,2); n=ftell(fp1)/sizeof(struct Stu1); rewind(fp1); if((fp2=fopen("student2.dat","rb+"))==NULL) { printf("\t>>不能打开student2.dat文件\n"); exit(12); } fseek(fp2,0,2); x=ftell(fp2)/sizeof(struct Stu2); if(x>0) rewind(fp2); printf("\n删除学号: "); scanf("%s",no); printf("1,确定 2,取消\n"); printf("请选择: "); scanf("%d",&p); switch(p) { case 1:if(n>0 && x>0) { for(i=0;i<n;i++) { fread(&st1,sizeof(struct Stu1),1,fp1); if(strcmp(no,st1.no)==0) { t=j;continue; } stt[j]=st1;j++; } fclose(fp1); fp1=fopen("student1.dat","wb"); for(i=0;i<j;i++) fwrite(&stt[i],sizeof(struct Stu1),1,fp1); for(i=0;i<x;i++) { fread(&at1,sizeof(struct Stu2),1,fp2); att[i]=f(at1,t,n); } fclose(fp2); fp2=fopen("student2.dat","wb"); for(i=0;i<x;i++) fwrite(&att[i],sizeof(struct Stu2),1,fp2); printf("已删除!\n"); }break; case 2:break; } fclose(fp1); fclose(fp2); } void dela_stud() //全删 { FILE *fp1,*fp2; int t,p; printf("\n******************************************************************************\n"); printf("\n1,仅删除考勤记录 2,全部删除 0,返回\n"); printf("请选择: "); printf("1,确定 2,取消\n"); printf("请选择: "); scanf("%d",&p); switch(p) { case 1:while(scanf("%d",&t)==1) { if(t==0) break; switch(t) { case 2:if((fp1=fopen("student1.dat","wb"))==NULL) { printf("\t>>不能打开student1.dat文件\n"); exit(13); } fclose(fp1); case 1:if((fp2=fopen("student2.dat","wb"))==NULL) { printf("\t>>不能打开student2.dat文件\n"); exit(13); } } printf("\t>>记录已删\n"); printf("\n1,仅删除考勤记录 2,全部删除 0,返回\n"); printf("请选择: "); } case 2:break; } printf("******************************************************************************\n"); fclose(fp2); } void main() { int t,p1,p2; system("color 3e"); printf("\n 欢迎使用\n"); printf("\n 考勤管理程序\n"); printf("\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n\n"); printf("1,初始化(学生信息和考勤初始化) 2,添加(添加学生和考勤记录)\n\n"); printf("3,按学号显示考勤记录 4,按日期显示考勤记录\n\n"); printf("5,查找(修改和显示) 6,显示学生信息(含修改)\n\n"); printf("7,统计(单个显示和全显示) 8,删除\n\n"); printf("9,全删 0,返回\n\n"); printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n\n"); printf("请选择: "); while(scanf("%d",&t)==1) { if(t==0) { system("cls"); printf("\n\n\n\n\n\n\n\n\n 再见!\n\n\n\n"); printf("\n\n\n\n\n\n\n 设计者: 邱河成\n"); printf("\n 班级: 计算111班 \n\n\n\n"); break; } switch(t) { case 1:system("cls"); printf("\n1,学生信息初始化 2,考勤初始化 0,返回\n"); printf("请选择: "); while(scanf("%d",&p1)==1) { if(p1==0) break; switch(p1) { case 1:system("cls");input_stud();break; case 2:system("cls");create_attend(t);break; } system("cls"); printf("\n1,学生信息初始化 2,考勤初始化 0,返回\n"); printf("请选择: "); } break; case 2:system("cls"); printf("\n1,添加学生 2,添加考勤记录 0,返回\n"); printf("请选择: "); while(scanf("%d",&p2)==1) { if(p2==0) break; switch(p2) { case 1:system("cls");add_stud();break; case 2:system("cls");create_attend(t);break; } system("cls"); printf("\n1,添加学生 2,添加考勤记录 0,返回\n"); printf("请选择: "); } break; case 3:system("cls");get_attend();system("pause");break; case 4:system("cls");disp_attend();system("pause");break; case 5:system("cls");find_attend();system("pause");break; case 6:system("cls");disp_stud();system("pause");break; case 7:system("cls");total_attend();system("pause");break; case 8:system("cls");del_stud();system("pause");break; case 9:system("cls");dela_stud();system("pause");break; } system("cls"); printf("\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n\n"); printf("1,初始化(学生信息和考勤初始化) 2,添加(添加学生和考勤记录)\n\n"); printf("3,按学号显示 4,按日期显示\n\n"); printf("5,查找(修改和显示) 6,显示学生信息(含修改)\n\n");; printf("7,统计(单个显示和全显示) 8,删除\n\n"); printf("9,全删 0,返回\n\n"); printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n\n"); printf("请选择: "); } }

2013-06-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除