建立一个学生信息系统C语言编程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了建立一个学生信息系统C语言编程相关的知识,希望对你有一定的参考价值。
•建立一个学生信息系统(包含姓名、学号、四科功课成绩及加权平均成绩),采用带表头结点的单链表构建,要求有菜单系统,几个主要功能:
1)新建链表
2)添加学生信息
3)搜索学生信息
4)删除学生信息
5)显示所有学生信息
6)按输入公式实现所有学生加权成绩计算(比如输入 “(a1+2*a2+3*a3+2*a4)/8”可以自动实现计算)
#include<stdlib.h>
#include<conio.h>
#include<string.h>
int bExit = 0;
int total = 0;
#define Create(the_one) the_one=(Stu *)malloc(sizeof(Stu))
typedef
struct Student
char cnum[20]; // 字符串学号
int inum; // 数字学号
char name[20]; // 姓名
float score; // 成绩
struct Student *next;
Stu;
Stu *the_one, *h, *pr, *last, *end;
//1.添加学生函数
void ADD()
int Four = 0;
printf("================================\\n");
Create(the_one);
the_one->next = NULL;
end = last; //end指向倒数第二个结点
last->next = the_one;//将the_one放在链表的 最后
last = the_one; //last指向倒数第一个结点
//输入学号
printf("输入学生信息:\\n学号:");
while (!Four)
gets(the_one->cnum);
if (strlen(the_one->cnum) != 4)
printf("输入非法:学号必须是4位,请重新输入!\\n学号:");
else
Four = 1;
the_one->inum = atoi(the_one->cnum); //int型学号
//输入姓名
printf("学生姓名:");
gets(the_one->name);
//输入成绩
printf("学生成绩:");
scanf("%f", &the_one->score);
getchar(); //接收回车
//总数+1
total++;
//排序
//pr从空head开始,last指向下一个(前趋pr,后趋last)
for (pr = h, last = pr->next; last->next; pr = pr->next, last = pr->next)
if (last->inum>the_one->inum)
//插入元素the_one
the_one->next = last;
pr->next = the_one;
last = end; //插入完成,将last移到最后。
end->next = NULL;//最后结点指针域置空,last->next为NULL,跳出循环
break;
printf("================================\\n");
//2.查询学生函数
void CHECK()
Stu *target, *p;
int fond = 0;
printf("================================\\n");
printf("输入要查找学生的学号:\\n学号:");
Create(target);
gets(target->cnum);
for (p = h->next; p; p = p->next)
if (!strcmp(p->cnum, target->cnum))
printf("学号为%s的学生信息:姓名(%s),分数(%.2f)\\n", p->cnum, p->name, p->score);
free(target);
fond = 1;
if (!fond)
printf("Wrong Student NO.!\\n");
printf("================================\\n");
//3.编辑学生
void EDIT()
Stu *target, *p;
int fond = 0;
printf("================================\\n");
printf("输入要编辑学生的学号:\\n学号:");
Create(target);
gets(target->cnum);
for (p = h->next; p; p = p->next)
if (!strcmp(p->cnum, target->cnum))
printf("学号为%s的学生信息:姓名(%s),分数(%.2f)\\n", p->cnum, p->name, p->score);
printf("请选择修改项目:\\n1:姓名\\n2:分数\\n");
char c;
c = getch();
switch (c)
case '1':
printf("输入正确的姓名:");
gets(p->name);
break;
case '2':
printf("输入最新成绩:");
scanf("%f", &p->score);
break;
printf("学号为%s的学生最新信息:姓名(%s),分数(%.2f)\\n", p->cnum, p->name, p->score);
free(target);
fond = 1;
if (!fond)
printf("Not Exit This NO.!\\n");
printf("================================\\n");
//4.删除学生
void DELETE1()
void PRINALL();
PRINALL();
Stu *target, *p, *pr;
int fond = 0;
printf("================================\\n");
printf("输入要删除学生的学号:(如果删除所有学生信息,请输入0000)\\n学号:");
Create(target);
gets(target->cnum);
target->inum = atoi(target->cnum);
// char *zero=&"0000";
if (!strcmp(target->cnum, "0000"))
h->next = NULL;
total = 0;
else
for (pr = h, p = h->next; p; pr = pr->next, p = p->next)
if (!strcmp(p->cnum, target->cnum))
printf("学号为%s的学生信息已删除\\n", p->cnum);
free(target);
pr->next = p->next;
p->next = NULL;
// free(p);此句报错
fond = 1;
total--;
if (!fond)
printf("没有找到学号为%s的学生,请确认学号输入是否正确\\n");
printf("================================\\n");
//5.打印全部
void PRINALL()
int amounts = 1;
Stu *Op;
printf("================================\\n");
printf("所有学生信息:\\n");
for (Op = h->next; Op; Op = Op->next)
printf("%d.%s,%s,%.2f\\n", amounts++, Op->cnum, Op->name, Op->score);
printf("================================\\n");
//6.总人数
void TOTAL()
printf("================================\\n");
printf("学生总人数:%d\\n", total);
printf("================================\\n");
//菜单函数
void Menu()
char order;
printf("================================\\n");
printf("| 1.添加学生. |\\n");
printf("| 2.查询学生. |\\n");
printf("| 3.编辑学生. |\\n");
printf("| 4.删除学生. |\\n");
printf("| 5.打印全部. |\\n");
printf("| 6.总人数. |\\n");
printf("| 7.退出. |\\n");
printf("================================\\n");
order = getch();
system("cls");
switch (order)
case '1':
ADD();
break;
case '2':
CHECK();
break;
case '3':
EDIT();
break;
case '4':
DELETE1();
break;
case '5':
PRINALL();
break;
case '6':
TOTAL();
break;
case '7':
bExit = 1;
break;
while (!bExit)
getch();
system("cls");
Menu();
void main()
//创建链表头
Create(h);
pr = last = end = the_one = h;
the_one->next = NULL;
Menu();
参考技术A #include<stdio.h> /*I/O函数*/
#include<stdlib.h> /*其它说明*/
#include<string.h> /*字符串函数*/
#define BUFLEN 100 /* 缓冲区最大字符数 */
#define LEN 15 /* 学号和姓名最大字符数,实际请更改 */
#define N 100 /* 最大学生人数,实际请更改*/
struct record /*结构体*/
char code[LEN+1]; /* 学号 */
char name[LEN+1]; /* 姓名 */
int age; /* 年龄 */
char sex[3]; /* 性别 */
char time[LEN+1]; /* 出生年月 */
char add[30]; /* 家庭地址 */
char tel[LEN+1]; /* 电话号码 */
char mail[30]; /* 电子邮件地址 */
stu[N];
int k=1,n,m; /* 定义全局变量 */
void readfile();/* 函数声明 */
void seek();
void modify();
void insert();
void del();
void display();
void save();
void menu();
int main()
while(k)
menu();
system("pause");
return 0;
void help()
printf("\n0.欢迎使用系统帮助!\n");
printf("\n1.进入系统后,先刷新学生信息,再查询;\n");
printf("\n2.按照菜单提示键入数字代号;\n");
printf("\n3.增加学生信息后,切记保存按7;\n");
printf("\n4.谢谢您的使用!\n");
void readfile()/* 建立信息 */
char *p="student.txt";
FILE *fp;
int i=0;
if ((fp=fopen("student.txt","r"))==NULL)
printf("Open file %s error! Strike any key to exit!",p);
system("pause");
exit(0);
while(fscanf(fp,"%s %s%d%s %s %s %s %s",stu[i].code,stu[i].name,&stu[i].age,
stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail)==8)
i++;
i=i;
fclose(fp);
n=i;
printf("录入完毕!\n");
void seek() /*查找*/
int i,item,flag;
char s1[21]; /* 以姓名和学号最长长度+1为准 */
printf("------------------\n");
printf("-----1.按学号查询-----\n");
printf("-----2.按姓名查询-----\n");
printf("-----3.退出本菜单-----\n");
printf("------------------\n");
while(1)
printf("请选择子菜单编号:");
scanf("%d",&item);
flag=0;
switch(item)
case 1:
printf("请输入要查询的学生的学号:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[i].code,s1)==0)
flag=1;
printf("学生学号 学生姓名 年龄 性别 出生年月 地址 电话 E-mail\n");
printf("--------------------------------------------------------------------\n");
printf("%6s %7s %6d %5s %9s %8s %10s %14s\n",stu[i].code,stu[i].name,stu[i].age,
stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);
if(flag==0)
printf("该学号不存在!\n"); break;
case 2:
printf("请输入要查询的学生的姓名:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[i].name,s1)==0)
flag=1;
printf("学生学号 学生姓名 年龄 性别 出生年月 地址 电话 E-mail\n");
printf("--------------------------------------------------------------------\n");
printf("%6s %7s %6d %5s %9s %8s %10s %14s\n",stu[i].code,stu[i].name,stu[i].age,
stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);
if(flag==0)
printf("该姓名不存在!\n"); break;
case 3:return;
default:printf("请在1-3之间选择\n");
void modify() /*修改信息*/
int i,item,num;
char sex1[3],s1[LEN+1],s2[LEN+1]; /* 以姓名和学号最长长度+1为准 */
printf("请输入要要修改的学生的学号:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[i].code,s1)==0) /*比较字符串是否相等*/
num=i;
printf("------------------\n");
printf("1.修改姓名\n");
printf("2.修改年龄\n");
printf("3.修改性别\n");
printf("4.修改出生年月\n");
printf("5.修改地址\n");
printf("6.修改电话号码\n");
printf("7.修改E-mail地址\n");
printf("8.退出本菜单\n");
printf("------------------\n");
while(1)
printf("请选择子菜单编号:");
scanf("%d",&item);
switch(item)
case 1:
printf("请输入新的姓名:\n");
scanf("%s",s2);
strcpy(stu[num].name,s2); break;
case 2:
printf("请输入新的年龄:\n");
scanf("%d",&stu[num].age);break;
case 3:
printf("请输入新的性别:\n");
scanf("%s",sex1);
strcpy(stu[num].sex,sex1); break;
case 4:
printf("请输入新的出生年月:\n");
scanf("%s",s2);
strcpy(stu[num].time,s2); break;
case 5:
printf("请输入新的地址:\n");
scanf("%s",s2);
strcpy(stu[num].add,s2); break;
case 6:
printf("请输入新的电话号码:\n");
scanf("%s",s2);
strcpy(stu[num].tel,s2); break;
case 7:
printf("请输入新的E-mail地址:\n");
scanf("%s",s2);
strcpy(stu[num].mail,s2); break;
case 8:return;
default:printf("请在1-8之间选择\n");
void sort()/*按学号排序*/
int i,j,*p,*q,s;
char temp[10];
for(i=0;i<n-1;i++)
for(j=n-1;j>i;j--)
if(strcmp(stu[j-1].code,stu[j].code)>0)
strcpy(temp,stu[j-1].code);
strcpy(stu[j-1].code,stu[j].code);
strcpy(stu[j].code,temp);
strcpy(temp,stu[j-1].name);
strcpy(stu[j-1].name,stu[j].name);
strcpy(stu[j].name,temp);
strcpy(temp,stu[j-1].sex);
strcpy(stu[j-1].sex,stu[j].sex);
strcpy(stu[j].sex,temp);
strcpy(temp,stu[j-1].time);
strcpy(stu[j-1].time,stu[j].time);
strcpy(stu[j].time,temp);
strcpy(temp,stu[j-1].add);
strcpy(stu[j-1].add,stu[j].add);
strcpy(stu[j].add,temp);
strcpy(temp,stu[j-1].tel);
strcpy(stu[j-1].tel,stu[j].tel);
strcpy(stu[j].tel,temp);
strcpy(temp,stu[j-1].mail);
strcpy(stu[j-1].mail,stu[j].mail);
strcpy(stu[j].mail,temp);
p=&stu[j-1].age;
q=&stu[j].age;
s=*q;
*q=*p;
*p=s;
void insert() /*插入函数*/
int i=n,j,flag;
printf("请输入待增加的学生数:\n");
scanf("%d",&m);
do
flag=1;
while(flag)
flag=0;
printf("请输入第 %d 个学生的学号:\n",i+1);
scanf("%s",stu[i].code);
for(j=0;j<i;j++)
if(strcmp(stu[i].code,stu[j].code)==0)
printf("已有该学号,请检查后重新录入!\n");
flag=1;
break; /*如有重复立即退出该层循环,提高判断速度*/
printf("请输入第 %d 个学生的姓名:\n",i+1);
scanf("%s",stu[i].name);
printf("请输入第 %d 个学生的年龄:\n",i+1);
scanf("%d",&stu[i].age);
printf("请输入第 %d 个学生的性别:\n",i+1);
scanf("%s",stu[i].sex);
printf("请输入第 %d 个学生的出生年月:(格式:年.月)\n",i+1);
scanf("%s",stu[i].time);
printf("请输入第 %d 个学生的地址:\n",i+1);
scanf("%s",stu[i].add);
printf("请输入第 %d 个学生的电话:\n",i+1);
scanf("%s",stu[i].tel);
printf("请输入第 %d 个学生的E-mail:\n",i+1);
scanf("%s",stu[i].mail);
if(flag==0)
i=i;
i++;
while(i<n+m);
n+=m;
printf("录入完毕!\n\n");
sort();
void del()
int i,j,flag=0;
char s1[LEN+1];
printf("请输入要删除学生的学号:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[i].code,s1)==0)
flag=1;
for(j=i;j<n-1;j++)
stu[j]=stu[j+1];
if(flag==0)
printf("该学号不存在!\n");
if(flag==1)
printf("删除成功,显示结果请选择菜单6\n");
n--;
void display()
int i;
printf("所有学生的信息为:\n");
printf("学生学号 学生姓名 年龄 性别 出生年月 地址 电话 E-mail\n");
printf("--------------------------------------------------------------------\n");
for(i=0;i<n;i++)
printf("%6s %7s %5d %5s %9s %8s %10s %14s\n",stu[i].code,stu[i].name,stu[i].age,
stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);
void save()
int i;
FILE *fp;
fp=fopen("student.txt","w"); /*写入*/
for(i=0;i<n;i++)
fprintf(fp,"%s %s %d %s %s %s %s %s\n",stu[i].code,stu[i].name,stu[i].age,
stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);
fclose(fp);
void menu()/* 界面 */
int num;
printf("*********************系统功能菜单************************ \n");
printf("友情提醒:查询前请先刷新系统! \n");
printf(" ---------------------- ---------------------- \n");
printf(" ********************************************* \n");
printf(" * 0.系统帮助及说明 * * 1.刷新学生信息 * \n");
printf(" ********************************************* \n");
printf(" * 2.查询学生信息 * * 3.修改学生信息 * \n");
printf(" ********************************************* \n");
printf(" * 4.增加学生信息 * * 5.按学号删除信息 * \n");
printf(" ********************************************* \n");
printf(" * 6.显示当前信息 * * 7.保存当前学生信息* \n");
printf(" ********************** ********************** \n");
printf(" * 8.退出系统 * \n");
printf(" ********************** \n");
printf(" ---------------------- ---------------------- \n");
printf("请选择菜单编号:");
scanf("%d",&num);
switch(num)
case 0:help();break;
case 1:readfile();break;
case 2:seek();break;
case 3:modify();break;
case 4:insert();break;
case 5:del();break;
case 6:display();break;
case 7:save();break;
case 8:k=0;break;
default:printf("请在0-8之间选择\n");
C语言 建立一个结构体类型,包括了学生姓名和两门课的成绩,用这个类型定义结构体数组,保存多个学生信息
编写程序,当输入一个学生姓名时,可以输出他的两门课成绩。
进一步完善,编写程序可以分别输出有一门课不及格的学生姓名和成绩
谢谢O(∩_∩)O
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct stu
int num;
int wuli;
int huaxue;
int math;
;
FILE *fp;
//添加学生信息,可以排除与已存的冲突;
void add()
int a,b,c,d,n=0;
struct stu student;
fp=fopen("score.txt","r+");
printf("请输入要添加学生的学号、物理成绩、化学成绩及数学成绩\n");
scanf("%d%d%d%d",&student.num,&student.wuli,&student.huaxue,&student.math);
while(!feof(fp))
fscanf(fp,"%d%d%d%d",&a,&b,&c,&d);
if(student.num==a)
printf("该学生信息已存在,不需要添加\n");
fclose(fp);
n=1;
break;
if(n==0)
printf("信息库中没有该学生信息,可以添加\n");
fseek(fp,0,2);//文件末尾添加;
fprintf(fp,"%d\t%d\t%d\t%d\n",student.num,student.wuli,student.huaxue,student.math);
fclose(fp);
//修改学生信息;
void modify()
int n=0,number,a,b,c,d,offset;
struct stu student;
fp=fopen("score.txt","r+");
if(fp==NULL)
printf("信息库为空\n");
exit(0);
printf("请输入要修改学生的学号\n");
scanf("%d",&number);
while(!feof(fp))
offset=ftell(fp);
fscanf(fp,"%d%d%d%d",&a,&b,&c,&d);
if(number==a)
printf("该学生信息为:\n");
printf("%d\t%d\t%d\t%d\n",a,b,c,d);
printf("请输入要修改的信息\n");
scanf("%d%d%d%d",&student.num,&student.wuli,&student.huaxue,&student.math);
fseek(fp,offset,0);
fprintf(fp,"%d\t%d\t%d\t%d\n",student.num,student.wuli,student.huaxue,student.math);
n=1;
break;
if(n==0)
printf("该学生信息不存在\n");
fclose(fp);
//删除学生信息;
void del()
int n=0,number,a,b,c,d,m,offset;
fp=fopen("score.txt","r+");
if(fp==NULL)
printf("信息库为空\n");
exit(0);
printf("请输入删除学生的学号\n");
scanf("%d",&number);
while(!feof(fp))
offset=ftell(fp);
fscanf(fp,"%d%d%d%d",&a,&b,&c,&d);
if(number==a)
printf("该学生信息为:\n");
printf("%d\t%d\t%d\t%d\n",a,b,c,d);
printf("是否要删除该学生信息,是:1 ;否:0\n");
scanf("%d",&m);
if(m)
fseek(fp,offset,0);
fprintf(fp,"%s\t%s\t%s\t%s"," "," "," "," ");
printf("\n");
printf("该学生信息已删除\n");
else printf("您已放弃删除该学生信息\n");
n=1;
break;
if(n==0)
printf("该学生信息不存在\n");
fclose(fp);
//查找学生信息;
void search()
int n=0,number,a,b,c,d,m;
char s[10];
fp=fopen("score.txt","r+");
if(fp==NULL)
printf("信息库为空\n");
exit(0);
printf("请选择查找方式:1--按学号查找;0--按学科查找\n");
scanf("%d",&m);
if(m)
printf("请输入要查找学生的学号\n");
scanf("%d",&number);
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
if(number==a)
printf("已找到,该学生信息为:\n");
printf("%s %s %s %s\n","学号","物理成绩","化学成绩","数学成绩");
printf("%d\t %d\t %d\t %d\n",a,b,c,d);
n=1;
break;
if(n==0)
printf("该学生信息不存在\n");
fclose(fp);
else
printf("请输入要查找的学科\n");
scanf("%s",s);
if(strcmp(s,"wuli")==0)
printf("学号\t物理成绩\n");
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
printf("%d\t%d\n",a,b);
fclose(fp);
if(strcmp(s,"huaxue")==0)
printf("学号\t化学成绩\n");
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
printf("%d\t%d\n",a,c);
fclose(fp);
if(strcmp(s,"math")==0)
printf("学号\t数学成绩\n");
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
printf("%d\t%d\n",a,d);
fclose(fp);
if(strcmp(s,"wuli")&&strcmp(s,"huaxue")&&strcmp(s,"math") )
printf("错误,要查找的学科不存在\n");
fclose(fp);
//统计学生信息;
void tongji()
int n=0,a,b,c,d,m,k,x[100],i,j,l=1;
float sum=0,h[100],k1;
fp=fopen("score.txt","r+");
if(fp==NULL)
printf("信息库为空\n");
exit(0);
printf("0--统计单科平均成绩\n");
printf("1--统计单个学生的平均成绩和总成绩,对学生排名\n");
printf("请选择统计类型\n");
scanf("%d",&m);
if(!m)
printf("1--统计物理的平均成绩\n");
printf("2--统计化学的平均成绩\n");
printf("3--统计数学的平均成绩\n");
printf("请选择要统计的学科\n");
scanf("%d",&m);
if(m==1)
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
sum=sum+b;
n++;
printf("物理的平均成绩为 %2.2f\n",sum/n);
fclose(fp);
if(m==2)
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
sum=sum+c;
n++;
printf("化学的平均成绩为 %.2f\n",sum/n);
fclose(fp);
if(m==3)
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
sum=sum+d;
n++;
printf("数学的平均成绩为 %.2f\n",sum/n);
fclose(fp);
else
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
h[n]=(float)(b+c+d);
x[n]=a;
n++;
for(i=0;l==1&&i<n-1;i++)
l=0;
for(j=0;j<n-1-i;j++)
if(h[j]>h[j+1])
k1=h[j];
h[j]=h[j+1];
h[j+1]=k1;
k=x[j];
x[j]=x[j+1];
x[j+1]=k;
l=1;
printf("排序后\n");
printf("学号\t总成绩\t平均成绩\n");
for(i=0;i<n;i++)
printf("%d\t%3.0f\t%.2f\n",x[i],h[i],h[i]/3.0);
fclose(fp);
void main()
int m;
/*fp=fopen("score.txt","w");
fprintf(fp,"%s\t%s\t%s\t%s\n","学号","物理成绩","化学成绩","数学成绩");
fclose(fp);*/
while(1)
printf("\n\t\t*********欢迎使用学生信息管理系统*********\n\n");
printf("\n\t\t添加,请按1");
printf("\n\t\t修改,请按2");
printf("\n\t\t删除,请按3");
printf("\n\t\t查询,请按4");
printf("\n\t\t统计,请按5");
printf("\n\t\t退出,请按0\n");
printf("\n\t\t********************************************\n\n");
printf("Please select(0--5):");
scanf("%d",&m);
if(m>=0&&m<=5)
switch(m)
case 1: add();
break;
case 2: modify();
break;
case 3: del();
break;
case 4: search();
break;
case 5: tongji();
break;
case 0: exit(0);
printf("\n\n操作完毕,请再次选择!");
else
printf("\n\n选择错误,请再次选择!");
下面是个输出不及格成绩的
#include<stdio.h>
float *search(float (*pointer)[4])
float *p;
int i;
p=*(pointer+2);
for(i=0;i<4;i++)
if(*(*pointer+i)<60)p=*pointer;
return p;
void main()
float score[][4]=60,70,80,90,56,89,67,89,34,78,90,66;
float *p;
int i,j;
for(i=0;i<3;i++)
p=search(score+i);
if(p==*(score+i))
printf("NO.%d's score:",i+1);
for(j=0;j<4;j++)
printf("%4.2f ",*(p+j));
printf("\n");
参考技术A 这就是完整的程序,不信你运行一下
main()
int a[10][10];
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
a[i][j]=i+j;
printf("%d",a[i][j]);
本回答被提问者和网友采纳 参考技术B 很简单的一个程序
课本上有例子的
以上是关于建立一个学生信息系统C语言编程的主要内容,如果未能解决你的问题,请参考以下文章