2022年9月

实现功能

1.录入(添加)学生信息:学号、姓名、平时成绩和考试成绩,总评成绩。
2.查询学生成绩:输入要查询的学生的学号,查询该学生的信息并显示。
3.显示学生成绩单:按学号顺序显示学生成绩单。
4.删除学生信息:输入要删除的学生的学号,,删除该学生的信息。
5.修改学生信息:输入要修改的学生的学号,显示该学生的原有信息,用户输入修改后的信息。

 

知识点

1.C语言的量声明和定义,以及变量初始化和生命周期与可见性
2.C语言指针的定义,初始化
3.C语言内存的申请和释放
4.C语言循环结构、选择结构、分支结构
5.C语言结构体
6.C语言数据结构之链表
7.C语言函数声明、实现、调用
8.C语言函数的参数、返回值
9.C语言文件打开、操作(读写)、关闭

代码

//宏定义区
#define _CRT_SECURE_NO_DEPRECATE  //防止VS警告

//头文件区
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>

//全局变量区
//学生结构体
typedef struct tagStudent
{
    char Num[10];//学号
    char Name[20];//姓名
    double Regular_Score;//平时成绩
    double Final_Score;//期末成绩
    double Total_Score;//总评成绩
}Student;

//学生链表结点
typedef struct tagNode
{
    Student Stu;//数据域:学生信息
    struct tagNode *pNext;//指针域:指向下一个学生结点
}Node;

//定义链表的第一个学生,即学生单链表的头结点
Node *g_pHead = NULL;

//全局函数定义区
// 打印功能菜单
void Print_Menu();
//1录入学生信息
void Enter_Students();
//2查询学生信息
Node* Inquire_Students();
//3显示学生信息
void Display_Students();
//4删除学生信息
void Deleting_Students();
//5修改学生信息
void Amend_Students();

//程序的主函数——程序入口
int main(int argc, char *argv[])
{
    while (1)//死循环
    {
        //清屏
        system("CLS");

        //打印功能菜单
        Print_Menu();

        char  ch;
        //控制台无回显获取信息
        ch = _getch();

        //switch分支选择结构
        switch (ch)
        {
        case'1': //1录入学生信息
            Enter_Students();
        break;

        case'2': //2查询学生信息
        {
            Node *pNode = Inquire_Students();
            if (pNode != NULL)
            {
                printf("%s\t %s\t %0.2lf \t%0.2lf \t%0.2lf\t\n",
                    pNode->Stu.Num,   //学号
                    pNode->Stu.Name, //姓名
                    pNode->Stu.Regular_Score,//平时成绩
                    pNode->Stu.Final_Score,  //期末成绩
                    pNode->Stu.Total_Score); //总评成绩
            }
            else
            {
                printf("未找到学生信息,请确认学生信息!\n");
            }
        break;
        }

        case'3': //3显示学生信息
            Display_Students();
        break;

        case'4': //4删除学生信息
            Deleting_Students();
        break;

        case'5': //5修改学生信息
            Amend_Students();
        break;

        case'0': //退出程序系统
            printf("欢迎再次使用!\n");
            return 0;
        break;

        default: //程序的健壮性,友好提示
            printf("您输入的选择有错误,请重新选择功能!\n");
        break;
        }
    system("PAUSE");
    }
    return 0;
}

//全局函数实现区
// 打印功能菜单
void Print_Menu()
{
    //清屏
    system("CLS");
    printf("=================================================\n");
    printf("===============欢迎使用高校学生管理系统==========\n");
    printf("=================================================\n");
    printf("===================请选择对应功能================\n");
    printf("=================================================\n");
    printf("=\t\t1、录入学生信息\t\t\t=\n");
    printf("=\t\t2、查询学生信息\t\t\t=\n");
    printf("=\t\t3、显示学生信息\t\t\t=\n");
    printf("=\t\t4、删除学生信息\t\t\t=\n");
    printf("=\t\t5、修改学生信息\t\t\t=\n");
    printf("=\t\t0、退出程序系统\t\t\t=\n");
    printf("=================================================\n");

    return;
}

//1录入学生信息
void Enter_Students()
{
    //清屏
    system("CLS");
    printf("=================================================\n");
    printf("===============欢迎使用高校学生管理系统==========\n");
    printf("=================================================\n");
    printf("===================录入学生信息功能================\n");
    printf("=================================================\n");
    printf("\n请依次输入学生信息:\n\n|学号 \t|姓名   |平时成绩|  |期末成绩|  |总评成绩|\n");

    //定义单链表的一个结点:当前结点
    Node *p;

    //将头结点给当前结点
    p = g_pHead;

    //在插入新结点前找到尾结点,
    while (g_pHead != NULL && p->pNext != NULL)
    {
        p = p->pNext;
    }

    //为新的学生元素分配一个空间
    //mallac  void*  泛类型   强制类型转换
    Node* pNewNode = (Node*)malloc(sizeof(Node));
    pNewNode->pNext = NULL;

    //将新节点插入尾结点或者作为头结点
    if (g_pHead == NULL)
    {
        g_pHead = pNewNode;
        p = g_pHead;
    }
    else
    {
        //p的下一个节点为pNewNode
        p->pNext = pNewNode;
    }

    //输入新的学生数据信息
    scanf("%s %s %lf %lf %lf", pNewNode->Stu.Num,        //学号  数组名就是数组首地址
        pNewNode->Stu.Name,                  //姓名
        &pNewNode->Stu.Regular_Score,    //平时成绩
        &pNewNode->Stu.Final_Score,      //期末成绩
        &pNewNode->Stu.Total_Score); //总评成绩

    printf("\n学生信息录入系统成功!\n");

    return;
}

//2查询学生信息
Node *Inquire_Students()
{
    //清屏
    system("CLS");
    printf("=================================================\n");
    printf("===============欢迎使用高校学生管理系统==========\n");
    printf("=================================================\n");
    printf("===================查询学生信息功能================\n");
    printf("=================================================\n");
    char Num[10]; //学号

    printf("\n请输入需要查询学生的学号:\n");

    scanf("%s",Num);

    Node  *p = g_pHead;
    printf("\n学号\t姓名\t平时成绩\t期末成绩\t总评成绩\t\n");

    //遍历链表
    while (p != NULL)
    {
        /*if (p->Stu.Num == Num) 字符数组不能比较
        需要字符比较      调用函数stricmp 以大小写不敏感方式比较两个串
        用法:int  stricmp( char  *str1,  char  *str2);
        返回值大于0,则str1>str2
        返回值小于0,则str1<str2
        返回值等于0,则str1=str2*/
        int  ptr = _stricmp(p->Stu.Num , Num);
        //如果找到学生信息
        if (ptr  ==  0)
        {
            return  p;
        }
        //否则继续找,直到遍历完链表退出while
        p = p->pNext;
    }

    //遍历完没有找到学生信息
    if (p == NULL)
    {
        return  NULL;
    }

    return  NULL;
}

//3显示学生信息
void Display_Students()
{
    //清屏
    system("CLS");
    printf("=================================================\n");
    printf("===============欢迎使用高校学生管理系统==========\n");
    printf("=================================================\n");
    printf("===================显示学生信息功能================\n");
    printf("=================================================\n");

    Node  *p = g_pHead;
    printf("学号\t| 姓名\t| 平时成绩\t| 期末成绩\t| 总评成绩\t|\n");

    //如果链表里没有学生信息
    if (p == NULL)
    {
        printf("未找到学生信息,请先录入学生信息!\n\n");
        return;
    }

    //如果链表里有学生信息,则遍历链表
    while (p != NULL)
    {
        printf("%s\t|  %s\t|  %0.2lf \t| %0.2lf \t| %0.2lf\t|\n",
                    p->Stu.Num,                  //学号
                    p->Stu.Name,                 //姓名
                    p->Stu.Regular_Score,    //平时成绩
                    p->Stu.Final_Score,      //期末成绩
                    p->Stu.Total_Score); //总评成绩);

        p = p->pNext;
    }
    printf("=================================================\n");
    return;
}

//4删除学生信息
void Deleting_Students()
{
    //清屏
    system("CLS");
    printf("=================================================\n");
    printf("===============欢迎使用高校学生管理系统==========\n");
    printf("=================================================\n");
    printf("===================删除学生信息功能================\n");
    printf("=================================================\n");
    char Num[10];  //学号

    printf("\n请输入需要删除学生的学号:\n");

    scanf("%s", Num);

    Node  *p = g_pHead;

    //定义一个临时变量结点
    Node  *p2 = NULL;

    //如果要删除的学生信息是链表的头结点
    int  ptr = _stricmp(g_pHead->Stu.Num , Num);
    if (ptr  ==  0)
    {
        p2 = g_pHead;
        g_pHead = g_pHead->pNext;
        //释放内存,删除信息
        free(p2);
        printf("删除学生信息成功!");
        return;
    }

    //删除的学生信息不是头结点
    while (p->pNext  !=  NULL)
    {
        int  ptr = _stricmp(p->pNext->Stu.Num, Num);
        if (ptr  ==  0)
        {
            p2 = p->pNext;
            p->pNext = p->pNext->pNext;
            //释放内存,删除信息
            free(p2);
            printf("删除学生信息成功!");
            return;
        }
        if (ptr != 0)
        {
            printf("学生信息不正确,请确认学生信息!");
        }
        //遍历链表
        p = p->pNext;
    }
    //遍历完没有找到学生信息
    if (p == NULL)
    {
        printf("未找到学生信息,请确认学生信息!\n\n");
    }
    return;
}

//5修改学生信息
void Amend_Students()
{
    //清屏
    system("CLS");
    printf("=================================================\n");
    printf("===============欢迎使用高校学生管理系统==========\n");
    printf("=================================================\n");
    printf("===================修改学生信息功能================\n");
    printf("=================================================\n");

    char Num[10];  //学号

    printf("\n请输入需要修改学生的学号:");

    scanf("%s", Num);

    Node  *p = g_pHead;

    //遍历链表
    while (p != NULL)
    {
        int  ptr = _stricmp(p->Stu.Num, Num);
        if (ptr  ==  0)
        {
            //显示要修改学生信息
            printf("=================================================\n");
            printf("%s\t|  %s\t|  %0.2lf \t| %0.2lf \t| %0.2lf\t|\n",
                p->Stu.Num,                  //学号
                p->Stu.Name,                 //姓名
                p->Stu.Regular_Score,    //平时成绩
                p->Stu.Final_Score,      //期末成绩
                p->Stu.Total_Score); //总评成绩);
            printf("=================================================\n");
            printf("请修改学生信息\n\n");
            printf("学号\t姓名\t平时成绩\t期末成绩\t总评成绩\t\n");
            scanf("%s %s %lf %lf %lf",
                p->Stu.Num,                  //学号
                p->Stu.Name,                 //姓名
                &p->Stu.Regular_Score,   //平时成绩
                &p->Stu.Final_Score,     //期末成绩
                &p->Stu.Total_Score);    //总评成绩
            printf("修改学生信息成功!\n");
            break;
        }
        //遍历链表
        p = p->pNext;
    }
    //遍历完没有找到学生信息
    if (p == NULL)
    {
        printf("未找到学生信息,请确认学生信息!\n\n");
    }
    return;
}

--> 实现功能1.录入(添加)学生信息:学号、姓名、平时成绩和考试成绩,总评成绩。2.查询学生成绩:输入要查询的学生的学号,查询该学生的信息并显示。3.显示学生成绩单:按学号顺序显示学生成绩单。4.删除学生信息:输入要删除的学生的学号,,删除该学生的信息。5.修改学生信息:输入要修改的学生的学号,显示该学生的原有信息,用户输入修改后的信息。 知识点1.C语言的量声明和定义,以及变量初始化和生命周期...

typedef struct Link{
    char elem; //代表数据域
    struct Link * next; //代表指针域,指向直接后继元素
}link; //link为节点名,每个节点都是一个 link 
//提示,由于指针域中的指针要指向的也是一个节点,因此要声明为 Link 类型
(这里要写成 struct Link* 的形式)。

  1. 头指针:一个普通的指针,它的特点是永远指向链表第一个节点的位置。很明显,头指针用于指明链表的位置,便于后期找到链表并使用表中的数据;
  2. 节点:链表中的节点又细分为头节点、首元节点和其他节点:
    • 头节点:其实就是一个不存任何数据的空节点,通常作为链表的第一个节点。对于链表来说,头节点不是必须的,它的作用只是为了方便解决某些实际问题;
    • 首元节点:由于头节点(也就是空节点)的缘故,链表中称第一个存有数据的节点为首元节点。首元节点只是对链表中第一个存有数据节点的一个称谓,没有实际意义;
    • 其他节点:链表中其他的节点;

创建一个存储 {1,2,3,4} 的链表,C 语言完整代码如下:

#include <stdio.h>
#include <stdlib.h>
//链表中节点的结构
typedef struct Link {
    int  elem;
    struct Link *next;
}link;
//初始化链表的函数
link * initLink();
//用于输出链表的函数
void display(link *p);

int main() {
    link*p = NULL;
    //初始化链表(1,2,3,4)
    printf("初始化链表为:\n");
    p = initLink();
    display(p);
    return 0;
}

link * initLink() {
    int i;
    link * p = NULL;//创建头指针
    link * temp = (link*)malloc(sizeof(link));//创建首元节点
    //首元节点先初始化
    temp->elem = 1;
    temp->next = NULL;
    p = temp;//头指针指向首元节点
    for (i = 2; i < 5; i++) {
        link *a = (link*)malloc(sizeof(link));
        a->elem = i;
        a->next = NULL;
        temp->next = a;
        temp = temp->next;
    }
    return p;
}
void display(link *p) {
    link* temp = p;//将temp指针重新指向头结点
    //只要temp指针指向的结点的next不是Null,就执行输出语句。
    while (temp) {
        printf("%d ", temp->elem);
        temp = temp->next;
    }
    printf("\n");
}

注意,如果使用带有头节点创建链表的方式,则输出链表的 display 函数需要做适当地修改:

void display(link *p){
    link* temp=p;//将temp指针重新指向头结点
    //只要temp指针指向的结点的next不是Null,就执行输出语句。
    while (temp->next) {
        temp=temp->next;
        printf("%d",temp->elem);
    }
    printf("\n");
}

--> 链表中每个数据的存储都由以下两部分组成:数据元素本身,其所在的区域称为数据域;指向直接后继元素的指针,所在的区域称为指针域;因此,链表中每个节点的具体实现,需要使用 C 语言中的结构体,具体实现代码为typedef struct Link{ char elem; //代表数据域 struct Link * next; //代表指针域,指向直接后继元素}link; //link为节...

言叶之庭

Rain(片尾曲)

基本信息

言叶之庭》(日语:言の葉の庭,英语:The Garden of Words)是2013年上映的日本动画电影,由新海诚编剧和执导、动画公司CoMix Wave Films制片、东宝发行,并由入野自由花泽香菜担纲主角配音。音乐方面,新海诚早期许多作品的音乐都由天门创作,而这次则由柏大辅负责。

本片是新海诚继《追逐繁星的孩子》后的第五部商业电影,以源于日本古代对爱情的语言表述方法展开,诞生了这个由揭示主题的雨、《万叶集》诗句以及日本庭园等元素组成的“孤悲”的《言叶之庭》之故事。此外,该片是目前新海诚执导电影中唯一无英文副标题的作品。本作于2013年4月28日在澳大利亚黄金海岸电影节首映,并于2013年 5 月31日在日本全面上映。其中日本首映时附加拨映短片《来自谁的凝望》。

剧情简介

        作品以爱情来临前的孤独——“孤悲”来呈现“恋爱”的主题。梅雨时节,以成为匠为目标的高中生秋月孝雄与神秘的女性雪野百香里,在雨中的新宿御苑中相遇。故事以女性留给少年的一段《万叶集》诗句为契机,就此开展。

       故事以15岁高中生,秋月孝雄翘课来到新宿御苑内为开端,此时的东京随着入梅而开始进入雨季。喜欢雨季的孝雄为自己规定仅在雨天的上午翘课,他以成为制鞋师为目标,到庭院内来也是思考设计鞋子并画出草图。这一次孝雄在亭子里与神秘的女性雪野百香里邂逅,27岁的她翘班来到庭院内饮酒并配以许多种类的巧克力,有时她也会看在雪野注意到孝雄的校服后转身离去,留下了一首让孝雄不解的、出自《万叶集》的短歌。自此以后,雨季早晨的新宿御苑内的那座亭子便成为他们二人短暂交谈的地点,两人逐渐产生超越年龄的情愫。

       为了表明对雪野的情意,孝雄开始专心于打工赚钱,并打算制作一双与雪野的脚相同尺寸的鞋。然而,随着雨季的结束,两人之间也逐渐浮现许多阻碍。暑假落幕后,孝雄意外在学校遇到雪野,发现她是校园里任教古文的教师,与此同时雪野因为校园女学生相泽造谣毁谤陷入困境,导致孝雄为了替雪野抱不平而和同校学生爆发肢体冲突。两者再约雨亭相谈期间,天气骤变成暴雨,雪野带着孝雄返回自己居住的公寓稍作歇息,孝雄鼓起勇气向雪野表白,但因为后者特意回避的举动,让按耐不住心绪的孝雄向她喊出内在的心声,终使得雪野不再逃避自己的内心,感谢对方让她拥有再度向前的勇气,紧抱着孝雄放声大哭。

       故事近尾声,雪野因为无法再承受校园学生的造谣毁谤,辞去教职离开东京后,返回故乡四国的学校任教。孝雄因为多度翘课造成学业成绩受影响,仍为了成为制鞋师的梦想在课余打工赚钱。最终孝雄于冬季的日子收到雪野报备近况的来信,再次抵达两人曾经交谈的亭子,留下亲手制作的女鞋,离去之际期盼著未来能和雪野再次相会。

隐约雷鸣,阴霾天空,但盼风雨来,能留你在此

隐约雷鸣,阴霾天空,即使天无雨,我亦留此地

——《万叶集》

--> 言叶之庭Rain(片尾曲)基本信息《言叶之庭》(日语:言の葉の庭,英语:The Garden of Words)是2013年上映的日本动画电影,由新海诚编剧和执导、动画公司CoMix Wave Films制片、东宝发行,并由入野自由和花泽香菜担纲主角配音。音乐方面,新海诚早期许多作品的音乐都由天门创作,而这次则由柏大辅负责。本片是新海诚继《追逐繁星的孩子》后的第五部商业电影,以源于日本古代对...

秒速五厘米

基本信息

     《秒速5厘米》新海诚创作的一部写实动画电影,于2007年3月3日在日本正式上映。作品以一个少年为故事轴心而展开连续3个独立故事的动画短篇,时代背景是从1990年代至现代的日本,通过少年的人生展现东京以及其他地区的变迁。 [1] 

       时间是1990年代后半至2000年代的日本[6],远野贵树与篠原明里原本是同班好友,自从小学毕业之后,两人因搬家都没有再见一次面。分隔两地的两个人,靠着书信往来保持联络,直到贵树知道即将跟随家人搬到鹿儿岛,距离明里更远的地方,于是两人约定了再见面的时间。计划好的行程,却遇上了暴风雪。之后两人都长大了,各有各的生活,但对彼此的思念一直留在心中。

本片由三个故事构成,分别是“樱花抄桜花抄(おうかしょう))”描述贵树和明里在中学的重逢;“宇航员コスモナウト)”描述高中同学花苗眼中的贵树,以及贵树与明里分开后的生活;“秒速5厘米秒速5センチメートル)”描述成年后他们各自的生活事情和贵树内心的徬徨。

2] 

剧情简介

樱花抄

     

       1990年代后半[6]东京的小学生远野贵树和篠原明里是在四年级认识的朋友,两人都比较沉静,不喜欢运动,并同有阅读的兴趣。六年级时两人在平交道约定,明年还要再来看樱花。两人原本考上同一所中学,但在小学毕业前夕,明里因父母工作关系突然要转校至栃木县下都贺郡岩舟町,她很无奈地通过电话通知贵树,贵树难以抑制情绪,也没有安慰对方就中断通话。在那之后两人之间产生距离,毕业典礼最后一次见面后就各奔东西,只能通过书信联络。升上初中后的第一年冬天,因父母工作关系需转校到鹿儿岛县种子岛的贵树,眼看与明里的距离就要变得更远,于是与明里在信中约定,在转学前的数天乘坐电车到岩舟站见面。贵树将各种心情都写在一封信里,打算在相见时交给对方。

       3月4日是他们相约见面的那天[7][8],贵树约下午四点出发,与明里约好七点在岩舟站候车室见面。他先从豪德寺站坐车前往新宿站,于新宿站搭上埼京线[9],在大宫站宇都宫线[10],最后在小山站两毛线前往岩舟站[11]。搭乘宇都宫线时,电车开始因大雪而连连延误[12],在小山站等待转车时,写满心意的信也被风雪吹走。贵树抵达岩舟站时已经是十点多,却见心心念念的明里还在候车室里等他。两人前往车站附近的樱花树,在树下接吻,并在一旁的农舍依偎著过夜。隔天一早雪停了,贵树马上就要搭电车回家,明里在车站送他离开,以“我想贵树你将来一定没有问题的”[注 3]一句话向他告别,随后电车门关上。明里也没能将写好的信交给贵树。

宇航员

   

    高中生澄田花苗是种子岛鹿儿岛县立中种子高等学校的学生,自中学以来就喜欢上从东京转校过来的远野贵树,却对这份恋情感到痛苦,无法表白,只有经常刻意和贵树同一时间走同一条路回家。贵树对她始终很温柔,让她感到更加难过。知道了贵树要前往东京升读大学后,花苗也感到时间的压力。花苗以冲浪为兴趣,但因为对贵树的单恋和对未来出路没有想法,种种心结让她始终没办法乘上浪头。

       这段时间,贵树一直想像著和明里看着异世界的光景,并反复输入没有要寄给任何人的简讯。在岛上的山丘上沈思时,花苗跑来他的身边,两人开始聊天。贵树表示自己的烦恼一直都很多,而他想先做自己能做的事情。这番话启发了花苗,心态一经转换,便成功地乘上了浪头。当天她下定决心要向贵树告白,放学后两人走在同一条路上,花苗的机车故障,只好表示要自己走回家,但是贵树主动陪他一起走。花苗在贵树身后,情绪不断累积,终于无法承受贵树的温柔而哭了起来。就在贵树不知所措时,日本的探索卫星从种子岛宇宙中心发射,壮观的景象使花苗想通了,贵树看的是比她还要更远的东西。最后花苗并没有表达心意,因为清楚即使她会永远喜欢贵树,但两人不会有结果。

秒速5厘米

    贵树大学毕业后,选择一个人回到小学时居住的东京工作,但不知是什么原因,他的心好像被什么束缚了一样。2008年2月2日[13],交往3年的女性水野主动传来分手简讯,表示虽然她爱着他,但两人的距离即使传千封简讯也不会拉近。也因为贵树始终挂念着明里却又无法相遇,为了逃避这份无力,他全心投入工作,心灵逐渐疲乏,最终毅然辞去工作,没事的时候经常游走于东京的各处街头,以及小学时曾和明里一同经过的地方。与此同时,明里即将与他人结婚,在车站和父母道别,搭乘电车前往东京,并因为先前整理东西发现贵树以前寄的信和当年写好却没交给贵树的信,而想起了当年两人重逢的那晚。最后的片段使用蒙太奇手法,以《One more time, One more chance》为配乐,不断穿插贵树、明里、花苗和水野在过去和现在的片段。最终,贵树和明里在小时候曾约定的平交道上偶然擦身而过,但在电车自两人间通过后,明里离开了。而贵树也露出微笑,决定潇洒地转身走向属于他的未来

     

音乐曲目

“秒速5厘米”Soundtrack[91]
曲序曲目时长
1.桜花抄4:51
2.想い出は遠くの日々1:41
3.焦燥1:09
4.雪の駅2:19
5.kiss3:13
6.カナエの気持ち1:47
7.1:40
8.空と海の詩2:00
9.届かない気持ち1:41
10.END THEME2:52
11.One more time,One more chance PIANO version5:00
总时长:28:13

--> 秒速五厘米基本信息     《秒速5厘米》是新海诚创作的一部写实动画电影,于2007年3月3日在日本正式上映。作品以一个少年为故事轴心而展开连续3个独立故事的动画短篇,时代背景是从1990年代至现代的日本,通过少年的人生展现东京以及其他地区的变迁。 [1]        时间是1990年代后半至2000年代的日本[6],远野贵树与篠原明里原本是同班好友,自从小学毕业之后,两人因搬家都没有再见...

运用继承,接口,包等技术,编写求解几何图形(包括三角形,矩形,圆)的周长,面积

//package oop123;              //包
import java.io.*;              //引入键盘输入所需要的类所在的包
interface getProperty{         //接口定义,方法声明
	double Pi = 3.1415926;
	double getArea();          //面积
	double getCircum();        //周长
	String getName();          //名称
}

class mpoint{                  //定义点
	static int i = 0;
	double x,y;
	mpoint(double a,double b){
		this.x = a;
		this.y = b;
	}
	double getX(){
		return x;
	}
	double getY(){
		return y;
	}

}

class disp{                  //定义屏幕输出所需要的类
	double area;             //面积
	double circum;           //周长
	String drawingName;      //名称
	disp(double a,double b,String ss){
		this.area = a;
		this.circum = b;
		this.drawingName = ss;
	}
	public void display(){
		System.out.println("图像 是 "+ drawingName);
		System.out.println("面积 = "+area+'\n'+"周长 = "+circum);
	}
}

class triangle implements getProperty{    //定义三角形
	mpoint p1,p2,p3;                      //三点
	double s1,s2,s3;                      //三边 
	String drawingName = "triangle";
	triangle(mpoint p1,mpoint p2, mpoint p3){ //构造方法
		this.p1 = p1;
		this.p2 = p2;
		this.p3 = p3;
		this.s1 = Math.sqrt((p1.x - p2.x)*(p1.x - p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
		this.s2 = Math.sqrt((p3.x - p2.x)*(p3.x - p2.x)+(p3.y-p2.y)*(p3.y-p2.y));
		this.s3 = Math.sqrt((p1.x - p3.x)*(p1.x - p3.x)+(p1.y-p3.y)*(p1.y-p3.y));
	}
	 //方法实现
	public double getArea(){      
		double ss,ssa;
		ss = (s1+s2+s3)*Pi/2.0/Pi;
		ssa = Math.sqrt(ss*(ss-s1)*(ss-s2)*(ss-s3));
		return ssa;
	}
	public double getCircum(){
		return s1+s2+s3;
	}
	public String getName(){
        return drawingName;
	}
	public boolean tline(){
		return true;
	}
}

class circle implements getProperty{     //定义圆形
	mpoint p1;                           //圆心
	double radius;                       //半径
	String drawingName = "Circle";
	circle(mpoint p1,double radius){    //构造方法
		this.p1 = p1;
		this.radius = radius;
	}
	public double getArea(){
		double ssa;
		ssa = Math.PI*radius*radius;
		return ssa;
	}
	public double getCircum(){
		return Math.PI*2.0*radius;
	}
	public String getName(){
		return drawingName;
	}
	public boolean tcircle(){
		return true;
	}
}

class rectangle implements getProperty{   //定义长方形
	mpoint p1,p2;
	double s1,s2;
	String drawingName = "Rectangle";
	rectangle(mpoint p1,mpoint p2){
		this.p1 = p1;
		this.p2 = p2;
		this.s1 = Math.sqrt((p1.x-p2.x)*(p1.x-p2.x));
		this.s2 = Math.sqrt((p1.y-p2.y)*(p1.y-p2.y));
	}
	public double getArea(){
		return s1*s2;	
	}
	public double getCircum(){
		return s1+s2+s1+s2;
	}
	public String getName(){
		return drawingName;
	}
	public boolean rline(){
		return true;
	}
}
public class drawing extends disp{      //定义 main() 所在的类
	drawing (double a, double b, String ss){
		super(a,b,ss);
//由于子类不能继承父类的构造方法,因此,如果要调用父类的构造方法,
//可以使用 super 关键字。super 可以用来访问父类的构造方法、普通方法和属性。
	}
	public static void main(String[] args) throws IOException {
         BufferedReader keyin = new BufferedReader(new InputStreamReader(System.in));
//new BufferedReader 将字符流放到字符流缓冲区之中
//new InputStreamReader 将字节流变为字符流
//System.in 字节输入流
         String strxx;
         for(;true;){
         	System.out.println("输入字符串如 Triangle,Rectangle,Circle:");
         	strxx = keyin.readLine();  //读取输入
         	if(strxx.length() == 0) continue;
         	char charxx;
         	charxx = strxx.toUpperCase().charAt(0);  //大小写转换
         	switch(charxx)
         	{
             	case'T':         //三角形
             	System.out.println("请输入(三角形) 第一个点 x(enter) y(enter)");
             	mpoint p1 = new mpoint(aVar(keyin),aVar(keyin));
             	System.out.println("请输入(三角形) 第二个点 x(enter) y(enter)");
             	mpoint p2 = new mpoint(aVar(keyin),aVar(keyin));
             	System.out.println("请输入(三角形) 第三个点 x(enter) y(enter)");
             	mpoint p3 = new mpoint(aVar(keyin),aVar(keyin));
             	triangle t1 = new triangle(p1,p2,p3);  //构造三角形
             	disp tdisp = new drawing(t1.getArea(),t1.getCircum(),t1.getName());
             	tdisp.display();
             	break;
             	
             	case'C':        //圆形
             	System.out.println("请输入(圆形) 圆心 x(enter) y(enter)");
             	mpoint p4 = new mpoint(aVar(keyin),aVar(keyin));
             	System.out.println("请输入半径 x(enter)");
             	double radius = aVar(keyin);
             	circle t2 = new circle(p4,radius);   //构造圆形
             	disp cdisp = new drawing(t2.getArea(),t2.getCircum(),t2.getName());
             	cdisp.display();
             	break;
             	
             	case'R':        //长方形
                System.out.println("请输入(长方形)第一个点 x(enter) y(enter)");
                mpoint p6 = new mpoint(aVar(keyin),aVar(keyin));
                System.out.println("请输入(长方形)第一个点 x(enter) y(enter)");
                mpoint p7 = new mpoint(aVar(keyin),aVar(keyin));
                rectangle t3 = new rectangle(p6,p7);   //构造长方形
                disp rdisp = new drawing(t3.getArea(),t3.getCircum(),t3.getName());
                rdisp.display();
                break;
                
                default:System.out.println("错误,请输入 t(T),c(C),r(R)");
         	}//switch
         }//for循环
	}//main 方法
	static double aVar(BufferedReader keyin) throws IOException
	{//得到一个双变量
		String xx;
		xx = keyin.readLine();
		return Double.parseDouble(xx);

	}
}

--> 运用继承,接口,包等技术,编写求解几何图形(包括三角形,矩形,圆)的周长,面积//package oop123; //包import java.io.*; //引入键盘输入所需要的类所在的包interface getProperty{ //接口定义,方法声明 double Pi = 3.1415926; double get...