您的位置:

培训机构管理系统c语言代码,c++教务管理系统源代码

本文目录一览:

学生会组织机构管理系统的设计与实现(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;

}