本文目录一览:
学生会组织机构管理系统的设计与实现(C语言算法)急,请C语言高手帮忙
刚写好的代码,VC下编译通过。合并排序法的关键步骤实现。
#include stdio.h
#include stdlib.h
void merge(int A[], int B[], int C[], int n1, int n2){
int i = 0;
int j = 0;
int k = 0;
int pA = 0, pB = 0;
for(k=0; kn1+n2; k++){
if(pA==1 pB==0){
C[k] = B[j];
j++;
}
else if(pA==0 pB==1){
C[k] = A[i];
i++;
}
else if(pA==0 pB==0){
if(A[i]B[j]){
C[k] = A[i];
i++;
if(i=n1)
pA = 1;
}
else{
C[k] = B[j];
j++;
if(j=n2)
pB = 1;
}
}
}
}
void main(){
int n1, n2;
int *A, *B, *C;
int i;
printf("输入n1: ");
scanf("%d", n1);
A = (int*)malloc(sizeof(int)*n1);
printf("从小到大输入%d个整数: \n", n1);
for(i=0; in1; i++){
printf("A[%d] = ", i);
scanf("%d", A[i]);
}
printf("输入n2: ");
scanf("%d", n2);
B = (int*)malloc(sizeof(int)*n2);
printf("从小到大输入%d个整数: \n", n2);
for(i=0; in2; i++){
printf("B[%d] = ", i);
scanf("%d", B[i]);
}
C = (int*)malloc(sizeof(int)*(n1+n2));
printf("A: ");
for(i=0; in1; i++)
printf("%d ", A[i]);
printf("\n");
printf("B: ");
for(i=0; in2; i++)
printf("%d ", B[i]);
printf("\n");
merge(A, B, C, n1, n2);
printf("调用merge()函数对A和B进行合并,结果保存在C...\n");
printf("合并后的C: ");
for(i=0; in1+n2; i++)
printf("%d ", C[i]);
printf("\n");
free(A);
free(B);
free(C);
}
跪求c语言教务管理系统源代码
#include stdio.h
#include string.h
#include windows.h
struct student
{
long int num;
char name[20];
int age;
char sex[4];
char b[30];
char p[15];
};
int n=0;
struct student stu[100];
struct student *p;
void lr();
void ll();
void cx();
void xg();
void sc();
void main()
{
int z;
printf("+---------------------------+\n");
printf("| 欢迎使用学生信息管理系统 |\n");
printf("+---------------------------+\n");
printf("提示:为保证您的操作得到保存,请按正常顺序退出系统^_^\n");
do
{
printf("\n\t\t\t--------------------------------\n");
printf("\t\t\t+ 主菜单 |\n");
printf("\t\t\t--------------------------------\n");
printf("\t\t\t+ [1]----录入学生信息 |\n");
printf("\t\t\t+ [2]----浏览学生信息 |\n");
printf("\t\t\t+ [3]----查询学生信息 |\n");
printf("\t\t\t+ [4]----删除学生信息 |\n");
printf("\t\t\t+ [5]----修改学生信息 |\n");
printf("\t\t\t+ [0]----退出系统 |\n");
printf("\t\t\t--------------------------------\n");
printf("请输入您的选择:");
scanf("%d", z);
system("color 2f");
switch(z)
{
case 0 : break;
case 1 :lr();break;
case 2 :ll();break;
case 3 :cx();break;
case 4 :sc();break;
case 5 :xg();break;
default:printf("\n无效选项!");
}
}
while(z!= 0);
}
void lr()/*录入函数*/
{
int y;
if(n==0)
p=stu;
do
{
printf("--------------------\n");
printf("请输入学生的学号:");
scanf("%ld",p-num);
printf("请输入学生的姓名:");
scanf("%s",p-name);
printf("请输入学生的年龄:");
scanf("%d",p-age);
printf("请输入学生的性别:");
scanf("%s",p-sex);
printf("请输入学生的地址:");
scanf("%s",p-b);
printf("请输入学生的电话:");
scanf("%s",p-p);
n++;
p++;
printf("\n1.继续输入.\n0.输入完毕.\n");
printf("请选择:");
scanf("%d",y);
}
while(y==1);
printf("提示:输入完毕!你一共输入%d个\n",n);
}
void ll()/*浏览函数*/
{
int i,j;
if(n!=0)
{ printf("学生总数:%d\n", n);
printf("学号\t姓名\t年龄\t性别\t地址\t\t电话\n");
printf("-----------------------------------------------------\n");
for(i=0;in;i++)
printf("%ld\t%s\t%d\t%s\t%s\t\t%s\n",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].b,stu[i].p);
}
else printf("提示:无学生数据,请输入数据!");
}
void cx()/*查询函数*/
{
int c;
int w,i,j=0;
char name[20];
if(n!=0)
{
do{ printf("\n");
printf("+--------------------+\n");
printf("| 按学号查询 请按 1 |\n");
printf("| 按姓名查询 请按 2 |\n");
printf("| 取消 请按 0 |\n");
printf("+--------------------+\n");
printf("请输入您的选择:");
scanf("%d", c);
switch(c)
{
case 0:break;
case 1:
printf("请输入学生的学号;");
scanf("%ld", w);
printf("\n");
for(i=0;in;i++)
if(stu[i].num==w)
{
printf("\n学号\t姓名\t年龄\t性别\t地址\t\t电话\n");
printf("%ld\t%s\t%d\t%s\t%s\t\t%s\n",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].b,stu[i].p);
j=1;
}
if(j==0)
printf("提示:没有该学生记录,请核对!");
break;
case 2:
printf("请输入学生的姓名:");
scanf("%s", name);
printf("\n");
for(i=0;in;i++)
if(strcmp(name,stu[i].name)==0)
{
printf("\n学号\t姓名\t年龄\t性别\t地址\t\t电话\n");
j=1;
printf("%ld\t%s\t%d\t%s\t%s\t\t%s\n",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].b,stu[i].p);
}
if(j==0)
printf("提示:没有该学生记录,请核对!");
break;
default:
printf("\n提示:无效选项!");
break;
}
}while(c!= 0);
}else printf("提示:无学生数据,请输入数据!");
return;
}
void xg()/*修改函数*/
{
long int num;
int i,j,c;
if(n!=0)
{
printf("请输入您要修改的学生的学号:");
scanf("%ld", num);
printf("\n");
for(i=0;in;i++)
if(stu[i].num==num)
j=i;
do{
printf("请选择您要修改的学生的信息内容:\n");
printf("+----------------------+\n");
printf("| 姓名 请按 1 |\n");
printf("| 年龄 请按 2 |\n");
printf("| 性别 请按 3 |\n");
printf("| 学号 请按 4 |\n");
printf("| 地址 请按 5 |\n");
printf("| 电话 请按 6 |\n");
printf("| 取消 请按 0 |\n");
printf("+----------------------+\n");
printf("请输入您的选择:");
scanf("%d", c);
printf("\n");
switch(c)
{
case 0:break;
case 1:printf("请输入新姓名:");
scanf("%s",stu[j].name);
break;
case 2:printf("请输入新年龄:");
scanf("%d",stu[j].age);
break;
case 3:printf("请输入新性别:");
scanf("%s",stu[j].sex);
break;
case 4:printf("请输入新学号:");
scanf("%ld",stu[j].num);
break;
case 5:printf("请输入新地址:");
scanf("%s",stu[j].b);
break;
case 6:printf("请输入新电话:");
scanf("%s",stu[j].p);
break;
default:
printf("\n无效选项!");
break;
}
}while(c!= 0);
}else printf("提示:无学生数据,请输入数据!");
}
void sc()/*删除函数*/
{
long int num;
int i,j,e;
if(n!=0)
{
printf("学号\t姓名\t年龄\t性别\t地址\t\t电话\n");
printf("-----------------------------------------------------\n");
for(i=0;in;i++)
printf("%ld\t%s\t%d\t%s\t%s\t\t%s\n",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].b,stu[i].p);
printf("请输入您要删除的学生的学号:");
scanf("%ld", num);
printf("\n");
for(i=0;in;i++)
if(num==stu[i].num)
j=i;
if(j!=(n-1))
{
for(e=i-1;en;e++,j++)
{
stu[j].num=stu[j+1].num;
strcpy(stu[j].name,stu[j+1].name);
strcpy(stu[j].sex,stu[j+1].sex);
stu[j].age=stu[j+1].age;
strcpy(stu[j].b,stu[j+1].b);
strcpy(stu[j].p,stu[j+1].p);
n--;p--;
}
}else {n--;p--;}
printf("提示:删除完毕!");
}else printf("提示:无学生数据,请输入数据!");
}
c语言学生管理系统源代码
头文件:::
#ifndef H_STUDENT_HH
#define H_STUDENT_HH
#include "stdio.h"
#include "string.h"
#include "malloc.h"
#define LEN sizeof(struct message_student) /*一个结构体数组元素的长度*/
#define numsubs 5 /*学科数目*/
typedef struct message_student /*结构体定义*/
{
char number[6];
char name[20];
char sex[4];
float subject[numsubs];
float score;
float average;
int index;
}student;
extern int numstus; /*学生数目*/
extern student *pointer; /*指向结构体数组*/
extern int lens;
int menu_select(); /*函数声明*/
int openfile(student stu[]);
int findrecord(student stud[]);
int writetotext(student stud[]);
void welcome();
void display1();
void showtable();
void sort(student stu[]);
void deleterecord(student stu[],int i);
void addrecord(student stud[]);
void display(student stud[],int n1,int n2);
void amendrecord(student stud[]);
void count(student stud[]);
void sortnum(student stud[]);
void sortnum2(student stud[]);
void sortname(student stud[]);
void sortname2(student stud[]);
void sortcount(student stud[]);
void sortcount2(student stud[]);
void statistic(student stud[]);
void display1();
#endif
#include "head.h"
int menu_select()
{
char c;
printf("\n\n");
printf(" | 1. 增加学生记录 5.统计信息 |\n");
printf(" | 2. 查询学生记录 6.打开文件 |\n");
printf(" | 3. 修改学生记录 7.保存文件 |\n");
printf(" | 4. 学生纪录排序 8.显示记录 |\n");
printf(" | 0.退出系统 |\n");
printf("\n\n");
printf("请选择(0-8):");
c=getchar();
getchar();
return (c-'0');
}
#include "head.h"
int findrecord(student stud[]) /*查找信息*/
{
char str[2];
int i,num;
if(numstus==0)
{
printf("没有可被查找的记录\n");
return -1;
}
else
{
printf("以何种方式查找?\n1.学号\t2.姓名\t3.名次\n");
gets(str);
if(str[0]=='1') /*按学号查找*/
{
printf("请输入学号:");
gets(str);
for(i=0;i=numstus;i++)
if(strcmp(str,stud[i].number)==0)
{
display(stud,i,i);
break;
}
else continue;
}
else if(str[0]=='2') /*按姓名查找*/
{
printf("请输入姓名:");
gets(str);
for(i=0;i=numstus;i++)
if(strcmp(str,stud[i].name)==0)
{
display(stud,i,i);
break;
}
else continue;
}
else if(str[0]=='3') /*按名次查找*/
{
printf("请输入名次:");
scanf("%d",num);
getchar();
for(i=0;i=numstus;i++)
if(num==stud[i].index)
{
display(stud,i,i);
break;
}
else continue;
}
if(inumstus)
{
printf("没有查找所要的信息。\n");
return -1;
}
return i;
}
}
#include"head.h"
int openfile(student stu[])
{
int i=0,j;
FILE *fp;
char filename[20],str[2];
if(numstus!=0)
{
printf("已经有记录存在,是否保存?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
writetotext(stu);
}
printf("请输入文件名:");
gets(filename);
numstus=0;
if((fp=fopen(filename,"rb+"))==NULL)
{
printf("无法打开该文件\n");
return(-1);
}
fscanf(fp,"%d",numstus);
fgetc(fp);
while(inumstus)
{
fscanf(fp,"%s",stu[i].number);
fscanf(fp,"%s",stu[i].name);
fscanf(fp,"%s",stu[i].sex);
for(j=0;jnumsubs;j++)
fscanf(fp,"%f",stu[i].subject[j]);
fscanf(fp,"%f",stu[i].score);
fscanf(fp,"%f",stu[i].average);
fscanf(fp,"%d",stu[i].index);
i++;
}
fclose(fp);
printf("文件读取成功\n");
printf("是否显示纪录?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
display(stu,0,numstus-1);
return(0);
}
#include "head.h"
void sort(student stud[])
{
int i,j=0;
char str[5];
student *p;
p=stud;
if(numstus==0)
{
printf("没有可供查询的记录!");
}
while(1)
{
for(i=0;;i++)
{
printf(" 请输入查询方式:");
printf("(直接输入回车则结束查询操作)\n");
printf("1.按照学号\t");
printf("2.按照姓名\t");
printf("3.按照名次\n");
gets(str);
if(strlen(str)==0) break;
if(str[0]=='1')
{
printf("请输入排序次序:\n");
printf("1.升序排列\t");
printf("2.降序排列\n");
gets(str);
if(str[0]=='1')
sortnum2(p);
else
sortnum(p);
display(stud,0,numstus-1);
}
else if(str[0]=='2')
{
printf("请输入排序次序:\n");
printf("1.升序排列\t");
printf("2.降序排列\n");
gets(str);
if(str[0]=='1')
sortname2(p);
else
sortname(p);
display(stud,0,numstus-1);
}
else if(str[0]=='3')
{
printf("请输入排序次序:\n");
printf("1.升序排列\t");
printf("2.降序排列\n");
gets(str);
if(str[0]=='1')
sortcount2(p);
else
sortcount(p);
display(stud,0,numstus-1);
}
else printf("请输入1~3");
printf("是否退出排序?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y') break;
}
return;
}
}
void sortnum(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;inumstus;i++)
for(j=0;jnumstus-i-1;j++)
{
if(strcmp(stud[j+1].number,stud[j].number)0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortnum2(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;inumstus;i++)
for(j=0;jnumstus-i-1;j++)
{
if(strcmp(stud[j].number,stud[j+1].number)0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortname(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;inumstus;i++)
for(j=0;jnumstus-i-1;j++)
{
if(strcmp(stud[j+1].name,stud[j].name)0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortname2(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;inumstus;i++)
for(j=0;jnumstus-i-1;j++)
{
if(strcmp(stud[j].name,stud[j+1].name)0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortcount(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;inumstus;i++)
for(j=0;jnumstus-i-1;j++)
{
if(stud[j+1].indexstud[j].index)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortcount2(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;inumstus;i++)
for(j=0;jnumstus-i-1;j++)
{
if(stud[j].indexstud[j+1].index)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
#include"head.h"
void statistic(student stud[]) /*新增功能,输出统计信息*/
{
int i,j=0,k=0;
char c1,str[2];
float average[numsubs],sum=0;
if(numstus==0)
printf("没有可被查找的记录\n");
else
{
while(1)
{
printf("下面将统计考试成绩\n");
printf("请选择你要统计哪科的成绩 1.A\t2.B\t3.C\t4.D\t5.E\n");
c1=getchar();
printf("\t一共有个%d记录\n",numstus); /*总共记录数*/
switch(c1)
{
case '1':
for(i=0;inumstus;i++) /*循环输入判断*/
{
sum+=stud[i].subject[0];
if(stud[k].subject[0]stud[i].subject[0]) k=i;
if(stud[j].subject[0]stud[i].subject[0]) j=i;
}
average[0]=sum/numstus;
printf("\t科目A的最高分:\n"); /*最高分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[0]);
printf("\t科目A的最低分是:\n"); /*最低分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[0]);
printf("\t科目A的平均分是 %5.2f\n",average[0]); /*平均分*/
break;
case '2':
for(i=0;inumstus;i++) /*循环输入判断*/
{
sum+=stud[i].subject[1];
if(stud[k].subject[1]stud[i].subject[1]) k=i;
if(stud[j].subject[1]stud[i].subject[1]) j=i;
}
average[1]=sum/numstus;
printf("\t科目B的最高分:\n"); /*最高分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[1]);
printf("\t科目B的最低分是:\n"); /*最低分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[1]);
printf("\t科目B的平均分是 %5.2f\n",average[1]); /*平均分*/
break;
case '3':
for(i=0;inumstus;i++) /*循环输入判断*/
{
sum+=stud[i].subject[2];
if(stud[k].subject[2]stud[i].subject[2]) k=i;
if(stud[j].subject[2]stud[i].subject[2]) j=i;
}
average[2]=sum/numstus;
printf("\t科目C的最高分:\n"); /*最高分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[2]);
printf("\t科目C的最低分是:\n"); /*最低分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[2]);
printf("\t科目C的平均分是 %5.2f\n",average[2]); /*平均分*/
break;
case '4':
for(i=0;inumstus;i++) /*循环输入判断*/
{
sum+=stud[i].subject[3];
if(stud[k].subject[3]stud[i].subject[3]) k=i;
if(stud[j].subject[3]stud[i].subject[3]) j=i;
}
average[3]=sum/numstus;
printf("\t科目D的最高分:\n"); /*最高分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[3]);
printf("\t科目D的最低分是:\n"); /*最低分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[3]);
printf("\t科目D的平均分是 %5.2f\n",average[3]); /*平均分*/
break;
case '5':
for(i=0;inumstus;i++) /*循环输入判断*/
{
sum+=stud[i].subject[4];
if(stud[k].subject[4]stud[i].subject[4]) k=i;
if(stud[j].subject[4]stud[i].subject[4]) j=i;
}
average[4]=sum/numstus;
printf("\t科目E的最高分:\n"); /*最高分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[4]);
printf("\t科目E的最低分是:\n"); /*最低分*/
printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[4]);
printf("\t科目E的平均分是 %5.2f\n",average[4]); /*平均分*/
break;
default:printf("输入错误!请输入1~5之间的数\n");
}
sum=0;
getchar();
printf("是否继续进行统计?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y') ;
else break;
}
}
}
#include"head.h"
int writetotext(student stud[]) /*将所有记录写入文件*/
{
int i=0,j;
FILE *fp;
char filename[20];
printf("输入文件名称:");
gets(filename);
fp=fopen(filename,"w");
fprintf(fp,"%d\n",numstus);
while(inumstus)
{
fprintf(fp,"%s %s %s ",stud[i].number,stud[i].name,stud[i].sex);
for(j=0;jnumsubs;j++)
fprintf(fp,"%f ",stud[i].subject[j]);
fprintf(fp,"%f %f %d ",stud[i].score,stud[i].average,stud[i].index);
i++;
}
fclose(fp);
printf("已成功存储!\n");
display(stud,0,numstus-1);
numstus=0;
return 0;
}
#include"head.h"
void welcome()
{
printf("\t*************************************************************\n");
printf("\t\t\t\t这是一个学生成绩管理系统\n\t\t\t\t 倾情奉献 欢迎使用!\n");
printf("\t*************************************************************\n");
}
void showtable()
{
printf("---------------------------------------------------------------------------------------\n");
printf("学号\t姓名\t性别\tA\tB\tC\tD\tE\t总分\t平均分\t名次\n");
printf("---------------------------------------------------------------------------------------\n");
}
void display(student stud[],int n1,int n2)
{
int i;
showtable(); /*显示表头*/
for(i=n1;i=n2;i++)
printf("%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%d\t\n",stud[i].number,stud[i].name,stud[i].sex,stud[i].subject[0],stud[i].subject[1],stud[i].subject[2],stud[i].subject[3],stud[i].subject[4],stud[i].score,stud[i].average,stud[i].index);
/*通过循环输出数据*/
}
void display1()
{
printf("\t\t本系统由计应精英一组亲情制作\n\n");
printf("\t\t制作人员列表: (按比划)\n");
printf("\t\t王庆斌\t\t\t张威\n\t\t李智\t\t\t周在峰\n\t\t杨凯\t\t\t胡杨\n");
printf("\n\n");
getchar();
}
#include"head.h"
#includestring.h
void amendrecord(student stud[])
{
char str[5]; /*供用户输入*/
int i=-1,j;
if(numstus==0) /*没有记录返回*/
printf("没有可供修改的记录!");
while(i0)
{
i=findrecord(stud);
if(i=0)
{
printf("要删除这个学生的信息吗?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
{
deleterecord(stud,i);
count(stud);
}
else
{
printf("确定要修改这个学生的信息吗?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
{
printf("下面请重新输入学生的信息:\n");
printf("请输入学号:");
gets(stud[i].number);
printf("请输入姓名:");
gets(stud[i].name);
printf("请输入性别(男/女 1/0):");
gets(str);
if(str[0]=='0')
strcpy(stud[i].sex,"女");
else
strcpy(stud[i].sex,"男");
stud[i].score=0;
printf("请按顺序输入成绩:");
for(j=0;jnumsubs;j++)
{
scanf("%f",stud[i].subject[j]);
stud[i].score+=stud[i].subject[j];
}
getchar();
stud[i].average=stud[i].score/numsubs;
}
count(stud);
}
display(stud,0,numstus-1);
}
printf("是否继续进行其他修改?(y/n)\n");
gets(str);
if(str[0]=='y'||str[0]=='Y')
i=-1;
else i=1;
}
}
void deleterecord(student stu[],int i) /*删除信息*/
{
int j;
while(i=0)
{
for(j=i;jnumstus;j++)
stu[j]=stu[j+1];
numstus--;
printf("删除成功!\n");
}
}
void count(student stud[])
{
int i,j;
for(i=0;inumstus;i++)
{
stud[i].index=1;
for(j=0;jnumstus;j++)
if(stud[j].scorestud[i].score)
stud[i].index++;
}
}
#include "head.h"
void addrecord(student stud[])
{
int i=0,j,num;
char str[5];
if(numstus!=0)
{
printf("已有记录存在是否覆盖?(y/n)\n");
gets(str);
if(str[0]=='Y'||str[0]=='y')
i=0;
else i=numstus;
}
printf("请输入增加的学生信息条目数:");
scanf("%d",num);
if(i==0)
numstus=num;
else numstus+=num;
if(numstuslens)
{
lens+=50;
pointer=(student *)realloc(pointer,lens*LEN);
}
printf("请输入学生信息:\n");
for(;inumstus;i++)
{
getchar();
printf("请输入学号:");
gets(pointer[i].number);
printf("请输入姓名:");
gets(pointer[i].name);
printf("请输入性别(男/女 1/0):");
gets(pointer[i].sex);
if(pointer[i].sex[0]=='0') strcpy(pointer[i].sex,"女");
else strcpy(pointer[i].sex,"男");
printf("请输入各科成绩:(按ABCDE的顺序):");
stud[i].score=0;
for(j=0;jnumsubs;j++)
{
scanf("%f",stud[i].subject[j]); /*计算总分*/
stud[i].score+=stud[i].subject[j];
}
stud[i].average=stud[i].score/numsubs; /*计算平均分*/
}
count(stud); /*附名次*/
display(stud,0,numstus-1);
getchar();
}#include "head.h"
int numstus;
int lens;
student *pointer;
void main()
{
int i=1;
char str[2];
lens=100;
pointer=(student *)malloc(lens*LEN); /*分配内存*/
numstus=0;
welcome(); /*欢迎界面*/
while(i0)
{
i=menu_select(); /*控制菜单*/
switch(i)
{
case 1:addrecord(pointer);break; /*增加学生信息*/
case 2:findrecord(pointer);break; /*查询学生信息*/
case 3:amendrecord(pointer);break; /*修改学生信息*/
case 4:sort(pointer);break; /*学生信息排序*/
case 5:statistic(pointer);break; /*统计信息*/
case 6:openfile(pointer);break; /*打开文件*/
case 7:writetotext(pointer);break; /*保存文件*/
case 8:display(pointer,0,numstus-1);break; /*显示记录*/
case 0:
if(numstus!=0) printf("是否保存当前记录?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
writetotext(pointer);
i=-1;break; /*退出系统*/
default:printf("请输入数字0~8:\n");i=1; /*输入错误*/
}
}
printf("\t\t欢迎再次使用本系统。\n\n");
display1();
}
自己一改就能用,给我加分哈!
打字不易,如满意,望采纳。
c语言课程设计—教师工作量管理系统源代码
#includestdio.h //标准输入、输出头文件
#includestring.h //包含字符串函数处理头文件
#includestdlib.h //包含动态存储与释放函数头文件
#includeiostream // 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-totaltra-info-total)) //第一次插入或者大于表头的情况
{
x=L;//插入表头
}
else if (p-info-totalL-prior-info-total) //小于表尾的情况
{
x=L-prior;//插入表尾
}
else
{ while (p-info-totaltra-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;iMAX;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;
}